예 를 들 어 Laravel 리 셋 암호 코드 재 구성

1.우선 비밀 번 호 를 리 셋 하 는 경로 확인
우리 가 laravel 을 설치 할 때 기본적으로 생 성 된 리 셋 암 호 는 사용자 가 로그 인하 지 않 은 상태 에서 진 행 됩 니 다.따라서 원래 의 컨트롤 러 를 사용 하 는 것 은 불가능 하 며,원래 의 암 호 를 리 셋 하 는 것 은 원본 암호 가 정확 한 지 확인 할 필요 가 없 으 며,메 일 을 통 해 암 호 를 직접 변경 할 필요 가 있 기 때문에 컨트롤 러 방법 을 다시 써 야 합 니 다.우 리 는php artisan make:controller UserController을 사용 하여 컨트롤 러 류 를 만 든 다음 에 두 개의 경로Route::get('reset', 'UserController@getReset')Route::post('reset', 'UserController@postReset')를 만 듭 니 다.
전 자 는 암 호 를 리 셋 하 는 페이지 get 요청 을 보 여 줍 니 다.다음은 암호 post 리 셋 요청 입 니 다.
2.비밀번호 초기 화 페이지 표시
이것 은getReset이 방법 을 사용 합 니 다.이 방법 은 하나의 보기 만 표시 하기 때문에 특별한 논리 가 없습니다.

public function getReset()
{
  return view('auth.reset');
}
3.비밀번호 리 셋 요청
이것 은postReset이 방법 을 사용 합 니 다.데 이 터 를 받 으 면 우 리 는 두 가지 방법 으로 전 송 된 데 이 터 를 받 을 수 있 습 니 다.하 나 는 request 의 방법 으로 데 이 터 를 받 는 것 이 고 다른 하 나 는 Input:get 의 방법 으로 데 이 터 를 얻 는 것 입 니 다.Request의 경우use Illuminate\Http\Request류 를 도입 해 야 하고Input의 경우use Input류 를 도입 해 야 합 니 다.여 기 는request을 사용 하여 받 아들 이 겠 습 니 다.
4.검증 규칙
검증 하면 laravel 은 우리 에 게 검 증 된 규칙 을 제공 하고validatorValidator::make()방법 으로 검증 합 니 다.

$data = $request->all(); //       
$rules = [
  'oldpassword'=>'required|between:6,20',
  'password'=>'required|between:6,20|confirmed',
];
$messages = [
  'required' => '      ',
  'between' => '     6~20   ',
  'confirmed' => '           '
];
$validator = Validator::make($data, $rules, $messages);
$data from 에서 전 달 된 데이터 정 보 를 받는다.rules수 신 된 값 을 판단 하 는데 그 중에서 배열 앞oldpasswordpassword은 전단 from 에서 수 신 된 원본 암호 와 새로운 암호 의 name 필드 데 이 터 를 검증 합 니 다.
인증 규칙 은 매 뉴 얼 의 인증 장 에 있 습 니 다.주의해 야 할 것 은 confirmed 를 사용 하면 새 비밀번호 와 비밀 번 호 를 확인 하기 위해 같은 판단 을 하 는 것 입 니 다.비밀 번 호 를 확인 하 는 데 필요 한 name 값 은 새 비밀번호 의 name 값 뒤에'_confirmation'를 추가 해 야 합 니 다.예 를 들 어 새 비밀번호 의 name 값 이newpassword이면...비밀 번 호 를 확인 하 는 name 값 은newpassword_confirmation이 어야 만 검 증 된 데이터 요청 에 대해 어떤 힌트 를 표시 할 수 있 습 니 다.
그리고 위의 검증 을 통 해 검증 되 지 않 은 경우 도 있 습 니 다.그것 은 입력 한 원본 암호 가 데이터베이스 에 있 는 원본 암호 와 같 는 지 여부 입 니 다.
여기 서 우 리 는 먼저 이 사용자 의 정 보 를 데이터베이스 에서 찾 아 낸 다음 에 입력 한 원시 비밀번호 와 비교 할 수 있다.여기 서 저 희 는messages을 사용 하여 사용자 의 정 보 를 얻 습 니 다.이 방법 은Auth::user()류 를 도입 한 다음 에use Auth;을 통 해 암호 판단 을 해 야 합 니 다.판단 이 끝 난 후에 또 하나의 문제 가 있 습 니 다.그것 은 바로 잘못된 정 보 를 vaidator 의 잘못된 정보 에 어떻게 넣 는 지 하 는 것 입 니 다.여기 서 laravel 은 우리 에 게 after 방법 을 제공 합 니 다.

$user = Auth::user();
$validator->after(function($validator) use ($oldpassword, $user) {
  if (!\Hash::check($oldpassword, $user->password)) { //                
    $validator->errors()->add('oldpassword', '     '); //            
  }
});
if ($validator->fails()) {   //       
  return back()->withErrors($validator); //     ,           session 
}
$user->password = bcrypt($password);    //  bcrypt         
$user->save();   //   ,     
여 기 는Hash::check()PHP 의 익명 함 수 를 도 입 했 기 때문에after 키 워드 를 사용 하여 외부 데 이 터 를 익명 함수 에 전송 해 야 합 니 다(PS:phop 의 새로운 기능,패키지 와 익명 함수)
익명 함수 에 전역 함 수 를 도 입 했 기 때문에 함수 앞 에\(PS:php 새로운 기능,네 임 스페이스 섹 션,전역 네 임 스페이스)를 추가 해 야 합 니 다.
5.전단 에 오류 메시지 표시
전단 에 나타 나 면use 변 수 를 사용 하여 오 류 를 표시 합 니 다.공식 문서 설명 에 따 르 면$errors의 예제 로 호출 되 었 습 니 다.관심 이 있 으 면 볼 수 있 습 니 다.저 희 는Illuminate\Support\MessageBag를 사용 하여 오류 가 있 는 지 판단 합 니 다.count($errors) > 0를 사용 하여 오류 정 보 를 표시 합 니 다.

@if(count($errors) > 0)
  <div class="alert alert-danger display-hide" style="display: block;">
    <button class="close" data-close="alert"></button>
    <span>  </span>
  </div>
@endif
제 잘못 이 고정된 곳 에 표시 되 지 않 고 모든 폼 뒤에 잘못된 정 보 를 표시 한다 면 어떻게 판단 하고 표시 해 야 하 느 냐 는 질문 이 있 을 수 있 습 니 다.정 답 은 $errors->first()을 사용 하여 이 이름 의 오류 가 있 는 지 판단 하 는 것 입 니 다.있 으 면$errors->has('oldpassword')을 사용 하여 이 오 류 를 표시 합 니 다.

@if( $errors->has('oldpassword') )
  <div class="alert alert-danger display-hide" style="display: block;">
    <button class="close" data-close="alert"></button>
    <span>  </span>
  </div>
@endif
이 중$errors->first('oldpassword') 은 각 폼 의 name 값 이기 때문에oldpassword방법 으로 사용자 정의 오 류 를 추가 할 때after에서$validator->errors()->add('oldpassword', ' ');어느 폼 의 오 류 를 정확하게 표시 해 야 합 니까?
6.완성 후의 예시
UserController

public function getReset()
{
  return view('auth.reset');
}

public function postReset(Request $request)
{
  $oldpassword = $request->input('oldpassword');
  $password = $request->input('password');
  $data = $request->all();
  $rules = [
    'oldpassword'=>'required|between:6,20',
    'password'=>'required|between:6,20|confirmed',
  ];
  $messages = [
    'required' => '      ',
    'between' => '     6~20   ',
    'confirmed' => '           '
  ];
  $validator = Validator::make($data, $rules, $messages);
  $user = Auth::user();
  $validator->after(function($validator) use ($oldpassword, $user) {
    if (!\Hash::check($oldpassword, $user->password)) {
      $validator->errors()->add('oldpassword', '     ');
    }
  });
  if ($validator->fails()) {
    return back()->withErrors($validator); //       
  }
  $user->password = bcrypt($password);
  $user->save();
  Auth::logout(); //        ,      
  return redirect('/login');
}
reset.blade

<form class="login-form" action="" method="post">
    <h3 class="font-green">    </h3>
    @if($errors->first())
      <div class="alert alert-danger display-hide" style="display: block;">
        <button class="close" data-close="alert"></button>
        <span>  </span>
      </div>
    @endif
    {!! csrf_field() !!}

    <div class="form-group">
      <label class="control-label visible-ie8 visible-ie9">    </label>
      <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Old Password" name="oldpassword"> </div>
    <div class="form-group">
      <label class="control-label visible-ie8 visible-ie9">   </label>
      <input class="form-control placeholder-no-fix" type="password" autocomplete="off" id="register_password" placeholder="New password" name="password"> </div>
    <div class="form-group">
      <label class="control-label visible-ie8 visible-ie9">    </label>
      <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Repeat password" name="password_confirmation"> </div>
    <div class="form-actions">
      <button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">  </button>
    </div>
  </form>
총결산
이상 이 본문의 전체 내용 입 니 다.Laravel 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 토론 을 환영 합 니 다.
데 니스 블 로그

좋은 웹페이지 즐겨찾기