У меня есть довольно уникальная проблема. Я использую веб-стек Yii2 с внешними компонентами SAS. В настоящее время я также использую openLDAP для аутентификации с помощью SAS и AWS. Мы управляем пользователями и пользовательскими ролями с помощью SAS, поэтому нам нужно использовать SAS для входа в веб-стек.Yii2 Вход по вызову хранимого процесса
Это небольшой фон. Вот в чем проблема: наш текущий SAS-процесс берет имя пользователя/пароль, и если он аутентифицирован, отправляет обратно объект, содержащий роль пользователя для rbac, и полное имя пользователя для использования в интерфейсе. Эта информация не является постоянным нигде, как в базе данных, поэтому я не уверен, как продолжить процесс входа в систему. Модель пользователя по умолчанию имеет закрытый статический массив $ users, и я попытался добавить в этот массив форматированную строку, возвращаемую сохраненным процессом, но когда процесс входа в систему завершен, я получаюnull
, возвращенный эхом
Yii::$app->user->identity
.
Возможно, это звучит немного запутанно, и я рад прояснить все, что не имеет смысла.
LoginForm.php
namespace app\models;
use app\components\SAS_Auth;
use Yii;
use yii\base\Model;
class LoginForm extends Model
{
public $username;
public $password;
public $rememberMe = true;
private $_user = false;
private $_authenticateUser = false;
public $_authString;
public function rules()
{
return [
// username and password are both required
[['username', 'password'], 'required'],
// rememberMe must be a boolean value
['rememberMe', 'boolean'],
// password is validated by validatePasswordSas()
['password', 'validatePasswordSas'],
];
}
public function validatePasswordSas($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUserSas();
$this->_authenticateUser = new SAS_Auth(); // SAS authentication class that contains auth functions
$this->_authString = $this->_authenticateUser->authenticate($this->username, $this->password);
if (!$user || !$this->_authString) {
$this->addError($attribute, 'Incorrect username or password.');
}
}
}
public function loginSas()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getUserSas(), $this->rememberMe ? 3600*24*30 : 0);
}
return false;
}
public function getUserSas()
{
if ($this->_user === false) {
$this->_authenticateUser = new SAS_Auth();
$this->_authString = $this->_authenticateUser->authenticate($this->username, $this->password);
$this->_user = User::findIdentity($this->_authString);
}
return $this->_user;
}
}
User.php
public $id;
public $username;
public $password;
public $authKey;
public $accessToken;
private static $users = [
// '100' => [
// 'id' => '100',
// 'username' => 'admin',
// 'password' => 'admin',
// 'authKey' => 'test100key',
// 'accessToken' => '100-token',
// ],
// '101' => [
// 'id' => '101',
// 'username' => 'demo',
// 'password' => 'demo',
// 'authKey' => 'test101key',
// 'accessToken' => '101-token',
// ],
];
/**
* @inheritdoc
*/
public static function findIdentity($id)
{
return isset(self::$users['100']) ? new static(self::$users['100']) : null;
}
модель Пользователь основном шаблонный. Любое направление очень ценится.
Проверьте свою модель пользователя для «public function getId()», это реализация «yii \ web \ IdentityInterface», этот идентификатор фактически используется для «findIdentity()». –