我正在使用Hash::check()
检查输入密码的当前密码。我用这个来检查这个动作
$HashPassowrd = Hash::make(Input::get('password'));
if( ! Hash::check( Input::get('currPassword') , $data->password ) )
{
return Redirect::to('profile.update')
->withErrors('Current Password in Incorrect!');
}
如何将其用作validator
?例如,在此rules
$rules = array(
'name' => 'required|alpha',
'family' => 'required',
'email' => 'required|email',
'currPassword'=> 'required',
'password' => 'required|confirmed',
'password_confirmation'=>'required',
);
答案 0 :(得分:7)
您可以将自定义规则添加到验证器中:
Validator::extend('checkHashedPass', function($attribute, $value, $parameters)
{
if( ! Hash::check( $value , $parameters[0] ) )
{
return false;
}
return true;
});
现在您可以将此自定义规则用作:
'currPassword' => 'required|checkHashedPass:' . Input::get('currPassword')
因此,如果此规则的验证失败,那么您将在视图中收到错误消息,并且可以使用$errors->first('currPassword');
进行访问,但您需要为您创建的此自定义规则传递自定义错误消息使用:
$messages = array( 'currPassword.checkHashedPass' => 'Current Password failed!' );
因此,在验证期间,您必须使用:
传递$messages
数组
$validator = Validator::make(Input::all(), $rules, $messages);
检查文档上的custom validation rules。
答案 1 :(得分:1)
您还可以使用闭包验证规则:
[ 'currPassword' => function ($attribute, $value, $fail) { if (! Hash::check($value, $this->user()->password)) { $fail('Your current password doesnt match'); } }, 'password' => 'required|min:6|confirmed', ];
答案 2 :(得分:0)
自 Laravel 6.x 以来,添加了密码验证规则,可以为您完成上述操作。
只需将此规则添加到您的验证规则中:
<块引用>'password' => 'password:api'
其中 api 是身份验证保护