Heim >Backend-Entwicklung >PHP-Tutorial >Ausführliche Erklärung des Beispiels zum Zurücksetzen des Laravel-Passworts
Angenommen, Sie müssen Laravel verwenden, um ein Backend-Content-Management-System zu erstellen, aber die Standard-Anmelderegistrierung von Laravel kann die aktuellen Anforderungen zum Zurücksetzen des Passworts nicht erfüllen, da es im Backend verwendet wird und keine E-Mail an gesendet werden muss Zurücksetzen ist die Standardeinstellung. Passwörter funktionieren definitiv nicht. Folgen Sie diesem Artikel, um zu erfahren, wie Sie das Passwort in Laravel zurücksetzen.
1. Bestimmen Sie zunächst die Route zum Zurücksetzen des Passworts
Das bei der Installation von Laravel standardmäßig generierte Reset-Passwort lautet Dies ist Wird ausgeführt, wenn der Benutzer nicht angemeldet ist. Daher ist es nicht möglich, den ursprünglichen Controller zu verwenden, und beim ursprünglichen Zurücksetzen des Passworts muss nicht überprüft werden, ob das ursprüngliche Passwort korrekt ist, sondern das Passwort wird direkt per E-Mail geändert. Daher müssen wir es für die Controller-Methode auch neu schreiben. Wir erstellen eine Controller-Klasse mit php artisan make:controller UserController
und erstellen dann zwei Routen Route::get('reset', 'UserController@getReset')
und Route::post('reset', 'UserController@postReset')
.
Ersteres ist eine Get-Anfrage zum Zurücksetzen des Passworts, gefolgt von einer Post-Anfrage zum Zurücksetzen des Passworts.
2. Zeigen Sie die Seite zum Zurücksetzen des Passworts an
Dies verwendet die Methode getReset
, diese Methode ist nur eine Ansicht muss angezeigt werden, sodass keine besondere Logik erforderlich ist
public function getReset() { return view('auth.reset'); }
3 Anforderung zum Zurücksetzen des Passworts
Dies verwendet die postReset
-Methode. Wir können zwei Methoden verwenden, um die übergebenen Daten zu empfangen: Eine besteht darin, die Anforderungsmethode zu verwenden, um Daten zu empfangen , Die andere besteht darin, die Methode Input::get zu verwenden, um Daten abzurufen. Wenn Request
die Klasse use IlluminateHttpRequest
einführen muss, wenn Input
die Klasse use Input
einführen muss, verwenden wir hier request
zum Empfangen.
4. Verifizierungsregeln
Zur Verifizierung stellt uns Laravel eine Reihe von Verifizierungsregeln zur Verfügung, verwenden Sie validator
s Validator::make()
Die Methode zum Überprüfen von
$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
empfängt die von
rules
übergebenen Dateninformationen und beurteilt den empfangenen Wert, wobei oldpassword
und vor dem Array password
sind die Namensfelddaten des ursprünglichen Passworts und des neuen Passworts, die vom Frontend zur Verifizierung empfangen wurden.
Die Verifizierungsregeln sind im Verifizierungskapitel des Handbuchs verfügbar Wird verwendet, um die gleiche Beurteilung zwischen dem neuen Passwort und dem bestätigten Passwort vorzunehmen. Der für das bestätigte Passwort erforderliche Namenswert muss der Namenswert des neuen Passworts sein, gefolgt von „_confirmation'
“. Das neue Passwort ist newpassword
, der Namenswert des bestätigten Passworts ist Es muss newpassword_confirmation
sein, um zu bestimmen, welche Eingabeaufforderung messages
für die verifizierte Datenanforderung angezeigt wird.
Nachdem die obige Überprüfung bestanden wurde, gibt es eine weitere Situation, die nicht überprüft wird, nämlich ob das ursprünglich eingegebene Passwort mit dem ursprünglichen Passwort in der Datenbank übereinstimmt.
Hier können wir zunächst die Benutzerinformationen aus der Datenbank überprüfen und diese dann mit dem ursprünglich eingegebenen Passwort vergleichen. Hier verwenden wir Auth::user()
, um Benutzerinformationen zu erhalten. Diese Methode erfordert die Einführung der Klasse use Auth;
und verwendet dann Hash::check()
, um das Passwort zu ermitteln. Nach dem Urteil stellt sich noch die Frage, wie man die Fehlermeldung in die Fehlermeldung des Validators einfügt. Hier stellt uns Laravel die After-Methode zur Verfügung:
$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(); //成功后,保存新密码
Hier, weil after
Es wird eine anonyme PHP-Funktion eingeführt, daher müssen wir das Schlüsselwort use
verwenden, um externe Daten an die anonyme Funktion zu übergeben (PS: neue PHP-Funktionen, Schließungen und anonyme Funktionen)
in der anonymen Funktion Hier haben wir eine globale Funktion eingeführt, daher müssen wir (PS: neue PHP-Funktionen, Namespace-Kapitel, globaler Namespace) vor der Funktion hinzufügen
5. Die Vorderseite Ende zeigt eine Fehlermeldung an
Für die Frontend-Anzeige verwenden wir die Variable $errors
, um Fehler anzuzeigen. Laut offizieller Dokumentation das Beispiel für den Aufruf von IlluminateSupportMessageBag
Wenn Sie Interesse haben, können Sie einen Blick darauf werfen. Wir verwenden count($errors) > 0
, um festzustellen, ob ein Fehler vorliegt, und verwenden $errors->first()
, um eine Fehlermeldung anzuzeigen:
@if(count($errors) > 0) <p class="alert alert-danger display-hide" style="display: block;"> <button class="close" data-close="alert"></button> <span> </span> </p> @endif
Jemand könnte fragen, ob mein Fehler vorliegt nicht angezeigt in Wenn die Fehlermeldung an einer Stelle fixiert ist, aber hinter jedem Formular angezeigt wird, wie sollen wir sie dann beurteilen und anzeigen? Die Antwort besteht darin, mit $errors->has('oldpassword')
festzustellen, ob ein Fehler mit diesem Namen vorliegt. Wenn ja, verwenden Sie $errors->first('oldpassword')
, um diesen Fehler anzuzeigen:
@if( $errors->has('oldpassword') ) <p class="alert alert-danger display-hide" style="display: block;"> <button class="close" data-close="alert"></button> <span> </span> </p> @endif
其中oldpassword
是每个表单的里的name值,所以在使用after
方法添加自定义错误的时候 $validator->errors()->add('oldpassword', '原密码错误');
中,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()) <p class="alert alert-danger display-hide" style="display: block;"> <button class="close" data-close="alert"></button> <span> </span> </p> @endif {!! csrf_field() !!} <p 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"> </p> <p 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"> </p> <p 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"> </p> <p class="form-actions"> <button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">确定</button> </p> </form>
相关推荐:
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung des Beispiels zum Zurücksetzen des Laravel-Passworts. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!