Мне нужно изменить пароль для моего приложения 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);
}
bcrypt()
генерирует случайную соль каждый раз. Чтобы проверить пароли, я должен использовать Hash :: check ().
Пример в документах:
if (Hash::check('plain-text-password', $hashedPassword)) {
// The passwords match...
}
Существует полезная функция аутентификации, которая называется 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');
Надеюсь это поможет.
Ура!