Ausführliche Erklärung des Beispiels zum Zurücksetzen des Laravel-Passworts

*文
Freigeben: 2023-03-18 20:22:01
Original
1906 Leute haben es durchsucht

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');
}
Nach dem Login kopieren

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 validators 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);
Nach dem Login kopieren

$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();   //成功后,保存新密码
Nach dem Login kopieren

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
Nach dem Login kopieren

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(&#39;oldpassword&#39;) festzustellen, ob ein Fehler mit diesem Namen vorliegt. Wenn ja, verwenden Sie $errors->first(&#39;oldpassword&#39;) , um diesen Fehler anzuzeigen:


@if( $errors->has(&#39;oldpassword&#39;) )
  <p class="alert alert-danger display-hide" style="display: block;">
    <button class="close" data-close="alert"></button>
    <span>  </span>
  </p>
@endif
Nach dem Login kopieren

其中oldpassword是每个表单的里的name值,所以在使用after方法添加自定义错误的时候 $validator->errors()->add(&#39;oldpassword&#39;, &#39;原密码错误&#39;);中,oldpassword一定要写对是在哪个表单的错误,这样才能正确的显示。

6、完成后的示例

UserController

public function getReset()
{
  return view(&#39;auth.reset&#39;);
}

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(&#39;oldpassword&#39;, &#39;原密码错误&#39;);
    }
  });
  if ($validator->fails()) {
    return back()->withErrors($validator); //返回一次性错误
  }
  $user->password = bcrypt($password);
  $user->save();
  Auth::logout(); //更改完这次密码后,退出这个用户
  return redirect('/login');
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

相关推荐:

学习Laravel5的Eloquent 关系

laravel编写APP接口(API)

laravel5.5控制器传参顺序问题及解决方案

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!