@Heckfy325
Начинающий программист. Простите за глупые вопросы

Как сделать проверку соответствия пароля?

Стоит такая задача, нужно сделать функционал смены пароля от личного кабинета пользователя.
Соответственно есть форма
5e70fa8935f85545601629.png
Чтобы пользователь смог сменить пароль, он должен ввести свой старый пароль, если он совпадает, то он может сменить его на новый.
Проблема в том что пароль в бд хранится в хэше.
5e70fb19bbd12040258291.png

В принципе алгоритм мне понятен, но не хватает знания на реализвацию.
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 1
kimono
@kimono
Web developer
В базе хранится хеш пароля, который генерируется этим методом:
$user->password_hash = Yii::$app->security->generatePasswordHash($password, $hash);

Когда вы делаете замену пароля, вы проверяете текущий пароль пользователя так:
public $old_password;
private $user;

public function __construct(User $user, $config = []){
    $this->user = $user;
    parent::__construct($config);
}

public function rules() {
    return [
        // ...
        ['old_password', 'validateOldPassword'],
    ];
}

public function validateOldPassword($attribute, $params, Validator $validator){
    if (!\Yii::$app->security->validatePassword($this->{$attribute}, $this->user->password_hash)){
        $this->addError($attribute, 'Старый пароль указан неверно!');
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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