예 를 들 어 Laravel 리 셋 암호 코드 재 구성
우리 가 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 은 우리 에 게 검 증 된 규칙 을 제공 하고
validator
의Validator::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
수 신 된 값 을 판단 하 는데 그 중에서 배열 앞oldpassword
과password
은 전단 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 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 토론 을 환영 합 니 다.
데 니스 블 로그
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.