2013-07-27 3 views
10

사용자가 데이터베이스에있는 암호와 동일한 암호를 게시했는지 확인해야합니다. 이전 암호 필드는 'oldpass'입니다. 내가 만든 사용자 정의 유효성 검사기를 '통과 확인'이라고합니다. 그에 따라 실패하거나 합격해야합니다.Laravel 4 수정 계정의 암호 필드에 대한 유효성 검사기

내 사용자 컨트롤러 코드가 작동하지 않습니다. 나는 무엇을 잘못했을 수 있었습니까?

$rules = array(
     'oldpass' => 'passcheck', 
    ); 

    $messages = array(
     'passcheck' => 'Your old password was incorrect', 
    ); 


    Validator::extend('passcheck', function($attribute, $value, $parameters) 
    { 
     if(!DB::table('users')->where('password', Hash::make(Input::get('oldpass')))->first()){ 
      return false; 
     } 
     else{ 
      return true; 
     }; 
    }); 

    $validator = Validator::make($inputs, $rules, $messages); 
+0

그래서 질문이 무엇입니까? –

+0

Hehe, @TryingTobemyselfRahul 방금 질문을 업데이트했습니다. 수정 해줘서 고마워. – TechyTimo

답변

19

당신이 뭔가를 사용해야

$user = DB::table('users')->where('username', 'someusername')->first(); 
if (Hash::check(Input::get('oldpass'), $user->password)) { 
    // The passwords match... 
    return true; 
} 
else { 
    return false; 
} 

그래서, 당신은 username 또는 기타 field를 사용하여 레코드를 가져 후 암호를 확인해야합니다.

@lucasmichot도 짧은 솔루션을 제공 :

Validator::extend('passcheck', function ($attribute, $value, $parameters) 
{ 
    return Hash::check($value, Auth::user()->getAuthPassword()); 
}); 
+0

감사합니다. 정말 고마워요! 다른 입력이 해시되지 않은 경우에는 어떻습니까? 예를 들어 try와 함께 사용하는 체크 박스는 다음과 같습니다. \t \t if (Input :: get ('termsandconditions') == '0') {return false;} else {return true;} ;}); – TechyTimo

+2

당신은 환영합니다,'(Input :: get ('termsandconditions') == 0) {// 체크하지 않았다}', [accept] (http://four.laravel.com/docs/validation#rule 승인 된) 유효성 검사 규칙. –

4

HTML 요소에 규칙을 묶어 말아주십시오. Laravel에서 제공하는 매개 변수를 사용하여 사용자 지정 규칙을 만듭니다. 이것은 (당신이 사용자가 인증 한 것을 asuming) 될 것이다 :

Validator::extend('passcheck', function($attribute, $value, $parameters) { 
    return Hash::check($value, Auth::user()->password); // Works for any form! 
}); 

$messages = array(
    'passcheck' => 'Your old password was incorrect', 
); 

$validator = Validator::make(Input::all(), [ 
    'oldpass' => 'passcheck', 
    // more rules ... 
], $messages); 
6

내가 이런 식으로 만들 것이 검증 규칙이 현재 사용자의 암호를 확인하기 위해 데이터베이스 쿼리를 만들 것입니다

/** 
* Rule is to be defined like this: 
* 
* 'passcheck:users,password,id,1' - Means password is taken from users table, user is searched by field id equal to 1 
*/ 
Validator::extend('passcheck', function ($attribute, $value, $parameters) { 
    $user = DB::table($parameters[0])->where($parameters[2], $parameters[3])->first([$parameters[1]]); 
    if (Hash::check($value, $user->{$parameters[1]})) { 
     return true; 
    } else { 
     return false; 
    } 
}); 

더 짧게 만들고 검색어를 저장할 수 있습니다.

Validator::extend('passcheck', function ($attribute, $value, $parameters) { 
    return Hash::check($value, Auth::user()->getAuthPassword()); 
}); 
관련 문제