Heim > PHP-Framework > Laravel > Hauptteil

So ändern Sie die Anmeldeüberprüfung in Laravel, um individuelle Anforderungen zu erfüllen

PHPz
Freigeben: 2023-04-21 11:10:13
Original
729 Leute haben es durchsucht

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:

  1. Sie möchten zusätzliche Überprüfungsbedingungen hinzufügen, wenn sich Benutzer anmelden.
  2. Sie möchten überprüfen, ob das Passwort nach der Anmeldung abgelaufen ist Der Benutzer muss das Passwort zurücksetzen.

1. Fügen Sie zusätzliche Verifizierungsbedingungen hinzu

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

在上面的代码中,我们首先获取用户提供的答案,然后从数据库中查找用户。如果用户不存在,我们立刻跳转回登录页面并告诉用户提供的凭证不正确。

如果用户被标记为机器人,或者提供的答案与数据库中字段不匹配,我们同样将用户重定向回登录页面。

但是,如果用户通过了安全问题的验证,我们将调用Auth::attempt()方法尝试登录用户。如果登录成功,我们将重定向用户到他们最初请求的页面。

二、密码过期验证

如果您的应用程序需要密码过期检查功能,那么我们可以使用Laravel的Auth模块,检查用户密码过期时间戳。如果时间戳表明密码已经过期,我们可以要求用户重置他们的密码。

首先,我们需要在User模型中添加一个密码过期时间戳字段:

protected $dates = ['password_updated_at'];
Nach dem Login kopieren

然后,我们需要重写Authenticatable接口中的hasPasswordExpired()方法:

public function hasPasswordExpired()
{
    $expirationDate = Carbon::now()->subDays(config('auth.password_expiration_days'));
    return $this->password_updated_at->lt($expirationDate);
}
Nach dem Login kopieren

在上面的代码中,我们首先获取当前时间和密码过期时间间隔前的日期,并将其放入期限变量中。然后,我们比较密码更新时间戳和过期日期。如果密码过期时间戳早于期限日期,那么说明密码已经过期。

接下来,我们需要更新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.']);
}
Nach dem Login kopieren
Im obigen Code erhalten wir zuerst die vom Benutzer bereitgestellte Antwort und suchen dann den Benutzer in der Datenbank. Wenn der Benutzer nicht existiert, springen wir sofort zurück zur Anmeldeseite und teilen dem Benutzer mit, dass die angegebenen Anmeldeinformationen falsch sind.

Wenn der Benutzer als Roboter markiert ist oder die bereitgestellte Antwort nicht mit den Feldern in der Datenbank übereinstimmt, leiten wir den Benutzer außerdem zurück zur Anmeldeseite.

Wenn der Benutzer jedoch die Überprüfung der Sicherheitsfrage besteht, rufen wir die Methode 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 Passwortablaufs

Wenn 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!

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!