@Praporshhik_Zadov

Как выкинуть пользователей при смене пароля в Yii2?

При смене пароля, ранее залогиненные пользователи со старым паролем, остаются залогиненными. Как можно сделать, чтоб при смене пароля, таких пользователей выкидывало из системы?
  • Вопрос задан
  • 464 просмотра
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Аутентификация в Yii2 работает не только через сессии. Еще есть кука \yii\web\User::$identityCookie. Если сессия удалена, или протухла по времени, то фреймворк восстановит пользовательскую аутентификацию через эту самую куку. То есть, в первую очередь, нужно сбросить куку.

За валидацию пользовательских cookie отвечает \yii\web\IdentityInterface::getAuthKey. На стороне БД обычно это поле auth_key в таблице user. Его содержимое нужно перегенерить новым случайным значением при смене пароля.

А, затем, если в вашем случае сеcсии хранятся в базе данных, удалить все сесcии конкретного пользователя. Для этого таблица с сессиями должна иметь поле с пользовательским ID.

Если используются встроенные сессии, то это можно не делать. Сессия и сама протухнет достаточно быстро.

Посмотрите уроки касательно этой темы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Oegir
@Oegir
Web-программист
config/main.php:
'components'=>[],
'on beforeRequest' => function () {
        $user = Yii::$app->user->identity;

        if ($user && $user->passwordChaged) {
            $user->passwordChaged = false;
            $user->save();
            Yii::$app->user->logout();
        }
    },
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы