Laravel 5.1 сменить пароль

Мне нужно изменить пароль для моего приложения laravel.
Я создал этот вид:

{!! Form::password('old_password', ['class'=>'form-control']) !!}
{!! Form::password('password', ['class'=>'form-control']) !!}
{!! Form::password('password_confirmation', ['class'=>'form-control']) !!}

Затем в моем контроллере я проверяю, введено ли значение для old_passwordтакой же, как текущий пароль пользователя.

if(bcrypt($request->old_password) !=$user->password) return redirect()->back()

Проблема в том, что указанное выше условие всегда будет верным. Это минут, даже если пользователь вводит правильный пароль, это условие вернет true!
Почему так?
Кстати, я хэширую пароль в моей модели пользователя:

 public function setPasswordAttribute($password){
$this->attributes['password'] = bcrypt($password);
}

2

Решение

bcrypt() генерирует случайную соль каждый раз. Чтобы проверить пароли, я должен использовать Hash :: check ().

Ссылка на документы

Пример в документах:

if (Hash::check('plain-text-password', $hashedPassword)) {
// The passwords match...
}
6

Другие решения

Существует полезная функция аутентификации, которая называется Auth::validate($credentials) где вы проходите [username, password] или же [email, password] сочетание. Это проверит ли предоставленный $credentials является действительным или нет без входа пользователя в систему.

Так в вашем AuthController вы бы проверили:

...
$credentials = [
'email' => $request->get('email'),
'password' => $request->get('old_password'),
];

if(\Auth::validate($credentials)) {
// TODO: Old password is correct, do your thing
// Change password and login, OR
// Send them to the login page
}

return redirect()->back()->withError('Incorrect old password');

Надеюсь это поможет.

Ура!

4