2014-03-29 2 views
2

그래서 Laravel 4에서 Ardent를 구현 중이며이 암호 확인이 일치하지 않는 이유를 해결할 수 없습니다.Laravel 4 - Ardent - 암호 확인이 일치하지 않습니다.

내 사용자 컨트롤러는 좋아에게 보이는이 :

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableInterface; 
use LaravelBook\Ardent\Ardent; 

class User extends Ardent implements UserInterface, RemindableInterface { 

public static $rules = array(
    'first_name'   => 'required|min:2|max:80|alpha', 
    'last_name'    => 'required|min:2|max:80|alpha', 
    'email'     => 'required|between:3,64|email|unique:users', 
    'postal_code'   => 'required|min:5|max:80', 
    'password'    => 'required|between:4,20|confirmed', 
    'password_confirmation' => 'same:password', 
    'timezone_id'   => 'required|numeric', 
); 

public $autoPurgeRedundantAttributes = true; 

그런 다음 모델 저장소의 행동에 나는 다음과 같습니다

$user = new User(Input::all()); 
if($user->save()) { 
    // does a bunch of stuff 
} 

그러나 결국 '암호 확인 경고들이 지속적인 내가 할 수있는 왜 그걸 왜 분류하는 것 같니? 확인 된 옵션을 암호 필드에서 제거하면 모든 것이 잘 작동합니다. 나는 그들이 그들이 동일하다는 것을 이해하게 할 수는없는 듯하다. 아래에 예제 var_dump를 포함 시켰습니다. 테스트 한 결과 유효성 검사를 통과하지 못했습니다.

array(10) { 
    ["_token"]=> string(40) "726lKBQgckGuLBxmJZ7Kjq4kzzXqADDqv3ZSnMOE" 
    ["first_name"]=> string(3) "asd" 
    ["last_name"]=> string(3) "asd" 
    ["email"]=> string(14) "[email protected]" 
    ["postal_code"]=> string(7) "XXX XXX" 
    ["new_game_notification"]=> string(1) "1" 
    ["timezone_id"]=> string(1) "5" 
    ["password"]=> string(6) "asdasd" 
    ["password_confirmation"]=> string(6) "asdasd" 
    ["role"]=> string(7) "regular" 
} 

저장하기 전에 해싱 암호를 해싱하고 있었지만이 문제를 해결하기 위해 지금 해지했습니다.

모든 제안이나 지침/방향에 크게 감사드립니다.

답변

2

그러니이 변합니다 나가 이것에 해결책을 찾아 냈다.

아이러니하게도, pasword_confirmation은 모형에서 볼 수 있고 유효성 검사를 실행하기 위해 Ardent에서 검증을 위해 존재할 수있는 모델로 채워야합니다.

데이터베이스에 필드가 없으면 모델에 대해 채울 수있는 배열에 변수를 넣는 이유는 실제로 문서화되지 않았지만 매우 간단한 솔루션입니다.

5

어쩌면 암호를 저장하기 전에 해시됩니다 ... 열렬한의

확인 문서 :

Route::post('register', function() { 
     $rules = array(
      'name'     => 'required|min:3|max:80|alpha_dash', 
      'email'     => 'required|between:3,64|email|unique:users', 
      'password'    => 'required|alpha_num|between:4,8|confirmed', 
      'password_confirmation' => 'required|alpha_num|between:4,8' 
     ); 

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

     if ($validator->passes()) { 
      User::create(array(
        'name'  => Input::get('name'), 
        'email' => Input::get('email'), 
        'password' => Hash::make(Input::get('password')) 
       )); 

      return Redirect::to('/')->with('message', 'Thanks for registering!'); 
     } else { 
      return Redirect::to('/')->withErrors($validator->getMessages()); 
     } 
    } 
); 

'비밀번호'=> : '필요 | alpha_num | | 사이 4,8 확정'

'password_confirmation'=> '필요 | alpha_num | 사이 : 4,8',

0

내 양식이 모델에 첨부되지 않았으므로 솔루션이 내 사례에 적용되지 않았습니다.

내 Laravel 4.2 프로젝트에서 똑같은 문제가 발생했습니다 : 내 암호 및 암호 확인 필드가 일치했지만 password_confirmation이 일치하지 않는다고 오류가 발생했습니다.

내가 알아 낸 것은 "확인 된"확인 규칙과 "동일한"확인 규칙이 충돌하는 것입니다. 문서를 읽고 내가 정말로 필요로하는 것이 "동일하다"는 것을 알게 된 후, 나는 패스워드에서 "confimred"를 제거하고 XDebug로 단계를 밟았다.

그것은 나를 위해 트릭을했습니다. 기본적으로 하나만 필요합니다

3

"password_confirm"을 채울 수있는 배열로 지정해야하는 것은 아닙니다. 다음 규칙이 있습니다.

'old_password' => 'required|alphaNum|between:6,16', 
'new_password' => 'required|alphaNum|between:6,16|confirmed', 
'new_password_confirmation' => 'required|alpha_num|between:4,8' 

및 뷰에서

나는 같은 이름을 가진 세 개의 필드가 있습니다

old_password

new_password

new_password_confirmation

을하고 나를 위해 제대로 작동.

유효성 검사중인 필드의 일치 필드는 foo_confirmation이어야합니다. 예를 들어 유효성 검사중인 필드가 암호 인 경우 일치하는 password_confirmation 필드가 입력에 있어야합니다.

0

Laravel 4.2에서 동일한 유효성 검사 오류가 발생했습니다. "같은"필터를 사용하거나 pw_confirmation으로 "채워진"배열을 설정하고 싶지 않았습니다. 비밀 번호에 대해 db에 필드를 정의하는 명시적인 방법을 무시했습니다. 그것이 문서화되어 있다면, 그것은 작동해야합니다!

그래서 내 솔루션이었다 :

public static $rules = array(
    'email' => 'required|email|unique:users,email', 
    'password' => 'required|min:6|max:20|confirmed' 
); 

, 컨트롤러 상태 :

public function registration() { 
    $input = Input::all(); 

    $validation = Validator::make($input, User::$rules); 
    $input['password'] = Hash::make($input['password']); 
    // THIS does the trick 
    $input['password_confirmation'] = Hash::make($input['password_confirmation']); 

    if ($validation->passes()) 
    { 
     User::create($input); 

그래서 확인 필드 그냥 암호가 "패스()"메소드 전에 같이 해시 된 수있다 .

관련 문제