Laravel ist ein sehr beliebtes PHP-Framework, das viele praktische Funktionen zum Erstellen von Webanwendungen bietet. Unter anderem ist das eigene Benutzerauthentifizierungssystem von Laravel eine sehr grundlegende Funktion für Entwickler beim Erstellen von Webanwendungen. Standardmäßig authentifiziert das Benutzerauthentifizierungssystem von Laravel Benutzer, wenn sie sich anmelden. Manchmal müssen wir es jedoch an unsere Bedürfnisse anpassen.
In diesem Artikel stellen wir vor, wie Sie die Anmeldeauthentifizierung von Laravel-Benutzern ändern können, um individuelle Anforderungen zu erfüllen. Wir stellen den Lesern zwei häufige Szenarien vor und diskutieren, wie diese Situationen gelöst werden können:
Im Standard-Benutzerauthentifizierungssystem von Laravel müssen Benutzer nur die richtige E-Mail-Adresse und das richtige Passwort angeben, um die Anmeldung abzuschließen. Aber manchmal müssen Benutzer zusätzliche Informationen für eine gezielte Überprüfung bereitstellen.
Zum Beispiel benötigen wir von Benutzern eine Antwort auf eine Sicherheitsfrage, um sicherzustellen, dass der Benutzer kein Roboter ist. Dieser Abgleich kann erfolgen, indem die gespeicherten Sicherheitsfragen und -antworten des Benutzers aus der Datenbank abgerufen und anschließend mit den vom Benutzer bereitgestellten Informationen verglichen werden. So implementieren Sie diese Überprüfung:
Zuerst müssen wir die Methode login
in LoginController
überschreiben, um die Antwort auf die Sicherheitsfrage zu überprüfen. Es kann so geschrieben werden: LoginController
中,重写login
方法以验证安全问题答案。可以这样写:
public function login(Request $request) { $answer = $request->input('answer'); $user = User::where('email', $request->email)->first(); if (!$user) { return redirect()->route('login') ->withInput($request->only('email', 'remember')) ->withErrors([ 'email' => 'The provided credentials are incorrect.', ]); } if ($user->isRobot() || $user->answer !== $answer) { return redirect()->route('login') ->withInput($request->only('email', 'remember')) ->withErrors([ 'email' => 'The provided credentials are incorrect.', ]); } if (Auth::attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) { return redirect()->intended('/dashboard'); } return redirect()->route('login') ->withInput($request->only('email', 'remember')) ->withErrors([ 'email' => 'The provided credentials are incorrect.', ]); }
在上面的代码中,我们首先获取用户提供的答案,然后从数据库中查找用户。如果用户不存在,我们立刻跳转回登录页面并告诉用户提供的凭证不正确。
如果用户被标记为机器人,或者提供的答案与数据库中字段不匹配,我们同样将用户重定向回登录页面。
但是,如果用户通过了安全问题的验证,我们将调用Auth::attempt()
方法尝试登录用户。如果登录成功,我们将重定向用户到他们最初请求的页面。
如果您的应用程序需要密码过期检查功能,那么我们可以使用Laravel的Auth模块,检查用户密码过期时间戳。如果时间戳表明密码已经过期,我们可以要求用户重置他们的密码。
首先,我们需要在User模型中添加一个密码过期时间戳字段:
protected $dates = ['password_updated_at'];
然后,我们需要重写Authenticatable
接口中的hasPasswordExpired()
方法:
public function hasPasswordExpired() { $expirationDate = Carbon::now()->subDays(config('auth.password_expiration_days')); return $this->password_updated_at->lt($expirationDate); }
在上面的代码中,我们首先获取当前时间和密码过期时间间隔前的日期,并将其放入期限变量中。然后,我们比较密码更新时间戳和过期日期。如果密码过期时间戳早于期限日期,那么说明密码已经过期。
接下来,我们需要更新LoginController
中的login()
public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { if (Auth::user()->hasPasswordExpired()) { Auth::logout(); return redirect('login')->withErrors(['password' => 'Your password has expired. Please reset it.']); } return redirect()->intended('/dashboard'); } return redirect('login')->withErrors(['email' => 'Your email or password is incorrect.']); }
Auth::attempt()
auf, um zu versuchen, den Benutzer anzumelden. Bei erfolgreicher Anmeldung leiten wir den Nutzer auf die ursprünglich angeforderte Seite weiter. 2. Überprüfung des PasswortablaufsWenn Ihre Anwendung eine Funktion zur Überprüfung des Passwortablaufs erfordert, können wir das Auth-Modul von Laravel verwenden, um den Zeitstempel des Benutzerpasswortablaufs zu überprüfen. Wenn der Zeitstempel anzeigt, dass das Passwort abgelaufen ist, können wir den Benutzer bitten, sein Passwort zurückzusetzen. 🎜🎜Zuerst müssen wir im Benutzermodell ein Zeitstempelfeld für den Passwortablauf hinzufügen: 🎜rrreee🎜Dann müssen wir die Methode hasPasswordExpired()
in der Schnittstelle Authenticatable
überschreiben : 🎜rrreee🎜Im obigen Code ermitteln wir zunächst die aktuelle Uhrzeit und das Datum vor dem Passwort-Ablaufintervall und geben sie in die Ablaufvariable ein. Anschließend vergleichen wir den Zeitstempel und das Ablaufdatum der Passwortaktualisierung. Wenn der Zeitstempel des Kennwortablaufs vor dem Ablaufdatum liegt, ist das Kennwort abgelaufen. 🎜🎜Als nächstes müssen wir die Methode login()
in LoginController
aktualisieren, um die Erkennung des Passwortablaufs zu ermöglichen. Dazu müssen wir das folgende Code-Snippet hinzufügen: 🎜rrreee🎜 Wenn im obigen Code das Passwort nach der Anmeldung des Benutzers abläuft, geben wir eine Umleitungsantwort mit einer Fehlermeldung zurück. Benutzer werden gezwungen, ein Passwort-Reset durchzuführen, um die Anwendung weiterhin verwenden zu können. 🎜🎜Zusammenfassung: 🎜🎜Die oben genannten Lösungen sind Lösungen zum Ändern der Anmeldeüberprüfung von Laravel-Benutzern in zwei häufigen Situationen. Der erste Fall besteht darin, beim Anmelden des Benutzers eine zusätzliche Überprüfungsbedingung hinzuzufügen. Wir verwenden eine Sicherheitsfrage, um zu überprüfen, ob der Benutzer ein Mensch ist. Die zweite Situation besteht darin, nach der Anmeldung zu überprüfen, ob das Passwort abgelaufen ist. Wenn es abläuft, muss der Benutzer das Passwort zurücksetzen. 🎜🎜Das Standardauthentifizierungssystem von Laravel ist sehr leistungsstark und umfasst viele Funktionen und Optionen, um den Anforderungen verschiedener Arten von Anwendungen gerecht zu werden. Durch Modifizierung und Erweiterung können wir es an unsere spezifischen Bedürfnisse anpassen. 🎜Das obige ist der detaillierte Inhalt vonSo ändern Sie die Anmeldeüberprüfung in Laravel, um individuelle Anforderungen zu erfüllen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!