#php #yii #yii2
Я провёл исследования стандартного примера, и выяснил, что функция validateAuthKey()
вообще не вызывается. Для чего она тогда нужна, как её правильно вызвать, как правильно
с ней работать?
public function validateAuthKey($authKey)
{
Yii::info('test ================');
return $this->authKey === $authKey;
}
Ответы
Ответ 1
validateAuthKey() проверяет $authKey - хэш, который хранится в куках. Вызывается для авторизации с помощью cookie в yii\web\User::loginByCookie при $enableAutoLogin = true protected function loginByCookie() { ... if ($identity->validateAuthKey($authKey)) { if ($this->beforeLogin($identity, true, $duration)) { $this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0); $ip = Yii::$app->getRequest()->getUserIP(); Yii::info("User '$id' logged in from $ip via cookie.", __METHOD__); $this->afterLogin($identity, true, $duration); } } ... }Ответ 2
Если сессий нет (уничтожены) и при логинировании пользователя мы указывали «remenberMe» (то есть второй параметр метода Yii::$app->user->login(), чтобы кука установилась), то Yii2 попытаеся авторизовать пользователя с помощью куки, вот здесь-то и вызывается этот загадочный метод validateAuthKey() ... Естественно, попытка авторизации будет происходить только в том случае, если мы обращаемся к сущности пользователя, например так: if (!Yii::$app->user->isGuest) { echo Html::a('Выйти', ['logout']); } Это можно проверить, удалив сессии из временной папки сервера (то есть оттуда, где они храняться) и как-нибудь обозначить вызов validateAuthKey(), например так: public function validateAuthKey($authKey) { echo ''; return $this->getAuthKey() === $authKey; } Ну или помидитировать над исходными кодами Yii2. Источники: метод проб и ошибок документация; How to login user from a database in Yii Framework 2
Комментариев нет:
Отправить комментарий