Для организации сброса авторизации пользователя после смены пароля в Yii вы можете использовать события и поведения.
1. Создайте новое событие passwordReset
в модели пользователя (User
) в методе afterSave
или afterUpdateAttributes
, чтобы оно вызывалось после успешного обновления пароля:
public function afterSave($insert, $changedAttributes) { parent::afterSave($insert, $changedAttributes); if (isset($changedAttributes['password'])) { $this->trigger('passwordReset', new yiibaseEvent()); } }
2. Подключите поведение InvalidateAuthKeyBehavior
(можно создать самостоятельно) к модели пользователя, чтобы сбрасывать ключ авторизации при выполнении события passwordReset
:
public function behaviors() { return [ 'invalidateAuthKey' => [ 'class' => InvalidateAuthKeyBehavior::class, 'events' => [ ActiveRecord::EVENT_AFTER_UPDATE => 'passwordReset', ], ], ]; }
3. В поведении InvalidateAuthKeyBehavior
создайте функцию, которая будет сбрасывать ключ авторизации:
class InvalidateAuthKeyBehavior extends Behavior { public $events = []; public function events() { return $this->events; } public function passwordReset($event) { $this->owner->generateAuthKey(); $this->owner->save(false, ['auth_key']); } }
Теперь, после изменения пароля пользователя, его ключ авторизации будет сброшен и все существующие сессии будут автоматически разлогинены.