2014-02-15 2 views
3

Я использую Hash::check() для проверки текущего пароля с введенным паролем. Я использую это, если для проверки этого действияLaravel use Hash as Validator

$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