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

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

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

В принципе алгоритм мне понятен, но не хватает знания на реализвацию.
  • Вопрос задан
  • 186 просмотров
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • teamcoding
    TC200PY Разработка PHP веб-приложений на Yii2. Шаблон приложения advanced
    3 месяца
    Далее
  • Onskills
    PHP: базовый курс
    1 месяц
    Далее
  • FructCode
    Yii2 Фреймворк
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 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, 'Старый пароль указан неверно!');
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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