Я работал над логином пользователя в yii2, но вместо использования активной записи другой сервер обрабатывает проверку имени пользователя и пароля. Итак, вот что я сделал, чтобы обойти:
в LoginForm.php
я внес некоторые изменения в validatePassword()
, где apiRest()
— это метод, который я использовал для отправки запроса на удаленный сервер, отвечающий за проверку.
if (!$this->hasErrors()) {
$json = '{
"username": "' . $this->username . '",
"password": "' . $this->password . '"
}';
$response = $this->apiRest("POST", "104.130.126.68:3000/api/users/login", $json);
$user = $this->getUser();
if(!$user || isset($response['error'])) {
$this->addError($attribute, $response['error']['message']);
}
if(isset($response['data'])) {
$user->id = $response['data']['userId'];
$user->username = $this->username;
$user->ttl = $response['data']['ttl'];
$user->created = $response['data']['created'];
$user->accessToken = $response['data']['id'];
}
}
И в LoginForm.php/getUser()
я тоже внес некоторые изменения:
if ($this->_user === false) {
$this->_user = User::createNewUser();
}
return $this->_user;
где в User.php
у меня есть:
public static function createNewUser()
{
$user = [
'id' => '',
'username' => '',
'ttl' => '',
'created' => '',
'accessToken' => '',
];
return new static($user);
}
Кажется, все в порядке, и я также могу распечатать идентификатор пользователя в SiteController.php/actionLogin()
:
if ($model->load(Yii::$app->request->post()) && $model->login()) {
print('<pre>');
print_r(Yii::$app->user->identity->username);
die();
return $this->redirect(['set/index']);
} else {
$this->layout = "plain";
return $this->render('login', [
'model' => $model,
]);
}
Однако проблема заключается в том, что после перенаправления страницы личность пользователя исчезла; в Yii::$app->user->identity
ничего нет. Я что-то пропустил? Помогите мне, пожалуйста.