Laravel使用Hash作为Validator

时间:2014-02-15 19:40:31

标签: php laravel laravel-4

我正在使用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',
        );

3 个答案:

答案 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 以来,添加了密码验证规则,可以为您完成上述操作。

检查its documentation

只需将此规则添加到您的验证规则中:

<块引用>

'password' => 'password:api'

其中 api 是身份验证保护