В форме сброса пароля пользователь поставляет current_password
, password
и password-confirmation
. Есть ли способ указать в правилах проверки, что current_password
(это значение hash) должен соответствовать значению базы данных?
В настоящее время у меня есть:
$rules = array( 'current_password' => 'required', 'password' => 'required|confirmed|min:22' );
Спасибо.
ОБНОВИТЬ
Благодаря @ChrisForrence и @Ben, я придумал следующее, которое отлично работает! Очень признателен. Надеюсь, это поможет кому-то еще:
Validator::extend('hashmatch', function($attribute, $value, $parameters) { return Hash::check($value, Auth::user()->$parameters[0]); }); $messages = array( 'hashmatch' => 'Your current password must match your account password.' ); $rules = array( 'current_password' => 'required|hashmatch:password', 'password' => 'required|confirmed|min:4|different:current_password' ); $validation = Validator::make( Input::all(), $rules, $messages );
Вы не можете, хэши bcrypt
уникальны (у них есть своя собственная случайная соль), поэтому, даже если вы знали пароль пользователя с обычным текстом, вы бы не смогли сравнить хеш-хэш.
То, что вы можете сделать, это проверить обычный текстовый пароль на хэш-код bcrypt
, выполнив Hash::check('plain text password', 'bcrypt hash')
на вашем контроллере.