как я могу проверить мой старый пароль с новым паролем

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

Проблема в том, что всякий раз, когда я использую функцию bcrypt для введенного пользователем пароля, он показывает какой-то новый сгенерированный пароль.

Пример: Во время регистрации пользователь зарегистрировался с паролем 111111. И во время смены пароля пользователь также вводит 111111, но оба они разные.

Q: Почему он показывает по-разному. Я использую это в laravel 5.4.


person Saroj    schedule 24.05.2017    source источник
comment
Возможное решение: stackoverflow.com/questions/4795385/   -  person Naincy    schedule 24.05.2017
comment
С BCrypt/password_* API вся идея заключается в том, что вы хэшируете его — каждый раз это будет другая строка, поэтому вам нужно использовать такие функции, как password_verify(), для проверки пароля, а не сравнивать это против повторно хешированной строки (как вы делаете при проверке паролей, которые являются sha1(), md5() и т. д., которые не являются безопасными).   -  person Qirel    schedule 24.05.2017
comment
Возможный дубликат безопасного хэша и соли для паролей PHP   -  person Dymen1    schedule 24.05.2017
comment
Спасибо @Qirel за краткую идею.   -  person Saroj    schedule 24.05.2017


Ответы (1)


Вы можете использовать Hash::check(), чтобы сравнить старый пароль с тем, который у вас есть в вашей базе данных как таковой.

if (Hash::check($oldPassword, $passwordFromDb)) 
{
   // it is a match
}

Таким образом, пример реализации будет таким:

$oldPassword    = $request->input('old-password');
$newPassword    = $request->input('new-password');
$hashedPassword = Auth::user()->password;

if (Hash::check($oldPassword, $hashedPassword)) 
{
    $user = User::find(Auth::user()->id)
                ->update(
                    ['password'=> Hash::make($newPassword)]
                );
}
person Mozammil    schedule 24.05.2017
comment
Спасибо за ваше время. Но зачем вы использовали ввод, когда вы можете получить всю информацию в объекте $request. Нравится -> $request-›старый-пароль. - person Saroj; 24.05.2017
comment
Мне нравится поддерживать его согласованность в моем приложении. См. документ. - person Mozammil; 24.05.2017