2014-10-22 3 views
0

로그인 한 사용자의 새 암호를 저장하거나 암호를 변경할 수있었습니다.Laravel - Confide - 암호 변경 저장

public function saveNewPassword() { 
    $rules = array(
     'old_password'   => 'required', 
     'password'  => 'required|confirmed|different:old_password', 
     'password_confirmation' => 'required|different:old_password|same:password_confirmation' 
    ); 
    $user = User::findOrFail(Auth::user()->id); 
    // Validate the inputs 
    $validator = Validator::make(Input::all(), $rules); 


    if ($validator->fails()) { 
     return Redirect::back() 
      ->withErrors($validator) 
      ->withInput(); 
    } else { 
     $password = Input::get('password'); 
     $passwordConfirmation = Input::get('password_confirmation'); 

     if(!empty($password)) { 
      if($password === $passwordConfirmation) { 
       $user->password = $password; 
       $user->password_confirmation = $passwordConfirmation; 
      } 
     } else { 
      unset($user->password); 
      unset($user->password_confirmation); 
     } 

     // Save if valid. Password field will be hashed before save 
     $user->save(); 
    } 

    // Get validation errors (see Ardent package) 
    $error = $user->errors()->all(); 

    if(empty($error)) { 
     Session::flash('message', 'Successfully saved!'); 
     return Redirect::back(); 

    } else { 
     Session::flash('error', $error); 
     return Redirect::back(); 
    } 
} 

내가 가지고있는 문제는 현재 암호와 동일한 이전 암호를 확인하는 것입니다. 어떤 아이디어? Confide는 비밀번호를 변경하는 자체 방법을 가지고 있습니까? Laravel 인증 및 알림 구성 요소/CONFIGS와

통합 : 털어의 GitHub의에서

+0

'Hash :: check ('old_password', $ user-> password)'를 사용할 수 없습니까? – user2094178

답변

0

.

그래서 Auth::validate() 메서드를 사용하면 트릭을 수행 할 것입니다.

4

이 해결 방법을 사용하여 암호를 변경합니다. 귀하의 규칙에 하나의 오류가 있습니다 : password_confirmation은 password_confirmation이 아닌 password와 동일해야합니다. 당신이 털어 작업을 해달라고하면

public function changePassword($id){ 
    $rules = array(
     'old_password'     => 'required', 
     'new_password'     => 'required|confirmed|different:old_password', 
     'new_password_confirmation'  => 'required|different:old_password|same:new_password' 
    ); 

    $user = User::find(Auth::user()->id); 
    $validator = Validator::make(Input::all(), $rules); 

    //Is the input valid? new_password confirmed and meets requirements 
    if ($validator->fails()) { 
     Session::flash('validationErrors', $validator->messages()); 
     return Redirect::back()->withInput(); 
    } 

    //Is the old password correct? 
    if(!Hash::check(Input::get('old_password'), $user->password)){ 
     return Redirect::back()->withInput()->withError('Password is not correct.'); 
    } 

    //Set new password to user 
    $user->password = Input::get('new_password'); 
    $user->password_confirmation = Input::get('new_password_confirmation'); 

    $user->touch(); 
    $save = $user->save(); 

    return Redirect::to('logout')->withMessage('Password has been changed.'); 

} 

이것은 또한 작동합니다

다음은 완전하고 테스트 기능입니다.