@mrSeller

Как сравнить два захешированных пароля?

Пароли сохраняются в таблицу, проходя через bcrypt()
При сохранении данных аккаунта нужно вводить старый пароль, а чтобы сравнить его с тем, что есть в базе, я так же прогоняю введенный пароль через bcrypt().
Таким образом обнаружил, что всегда генерируются разные хэши, используя один и тот же пароль.

Как тогда делать проверку?
И как вообще тогда происходит авторизация, если один и тот же пароль всегда по-разному хэшируется?
  • Вопрос задан
  • 1613 просмотров
Решения вопроса 2
@Arik
не нужно искать пароль в БД, нужно искать пользователя (по ИД, почте, логину)
когда нашли пользователя то берем его хэш пароля и через отдельную функцию проверяем.
То что каждый раз новый хэш это сегодня нормально, так если БД своруют, то не смогут подобрать пароль через обход по хэшам.
Ответ написан
Комментировать
JhaoDa
@JhaoDa
LaravelRUS Team
Начните читать документацию — https://laravel.com/docs/5.5/hashing
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Barmunk
создайте новое правило для валидатора, которое будет проверять текущий пароль

//AppServiceProvider.php
Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) {
            return Hash::check($value, auth()->user()->password);
}, "Неверный пароль, попробуйте еще раз!");

//controller
$validatedData = $request->validate([
    'old_password' => 'required|string|current_password',
]);

//...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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