2014-02-15 49 views
3

我使用Hash::check()使用输入的密码来检查当前密码。我用这个如果检查这个动作Laravel使用哈希作为验证器

$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', 
     ); 

回答

6

您可以来验证添加自定义规则:

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');进行访问,但是您需要为此自定义规则传递自定义错误消息d。使用:

$messages = array('currPassword.checkHashedPass' => 'Current Password failed!'); 

因此,验证过程中你必须通过使用$messages阵列:

$validator = Validator::make(Input::all(), $rules, $messages); 

对文档的检查custom validation rules

+1

如果用户的密码包含管道或冒号,该怎么办? – rachelderp