Informationen zur Implementierung der Mehrfeld-Anmeldung in Laravel5.4

不言
Freigeben: 2023-04-01 06:32:02
Original
1009 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Methode zur Implementierung der Mehrfeld-Anmeldung in Laravel5.4 vor. Jetzt kann ich ihn mit Ihnen teilen.

Ich bin darauf gestoßen Eine Anforderung besteht darin, den Effekt der Mehrfeld-Anmeldung zu erkennen, d Mehrfeld-Login basierend auf Laravel5.4. Freunde, die es benötigen, können sich die entsprechenden Informationen zu den Funktionen weiter unten ansehen.

Vorwort

Kürzlich musste ich eine Mehrfeld-Anmeldefunktion in einem Projekt implementieren, um es einfach auszudrücken: Sie können den Benutzernamen verwenden , E-Mail oder Mobiltelefon Melden Sie sich auf irgendeine Weise an. In diesem Artikel werden Ihnen die relevanten Inhalte zum Laravel5.4-Mehrfeld-Login vorgestellt und als Referenz und zum Studium zur Verfügung gestellt. Schauen wir uns ohne weitere Umschweife die ausführliche Einführung an.

Der folgende Inhalt basiert auf laravel5.4

Die Methode ist wie folgt:

Zuerst über das Handwerker-Tool Generate Auth Module

php artisan make:auth

Zu diesem Zeitpunkt wird ein Auth-Verzeichnis zum AppHttpControllers-Verzeichnis hinzugefügt. In diesem Verzeichnis befinden sich Controller für die Registrierung und Anmeldung . Einige registrierungsbezogene Controller werden auch im Verzeichnis resourcesviews generiert

In der offiziellen Dokumentation von Laravel heißt es, dass Sie zur manuellen Authentifizierung von Benutzern die Versuchsmethode der IlluminateSupportFacadesAuth-Klasse verwenden müssen:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
 /**
  * Handle an authentication attempt.
  *
  * @return Response
  */
 public function authenticate()
 {
  if (Auth::attempt([&#39;email&#39; => $email, &#39;password&#39; => $password])) {
   // Authentication passed...
   return redirect()->intended(&#39;dashboard&#39;);
  }
 }
}
Nach dem Login kopieren

Diese Methode bestimmt anhand der von Ihnen übergebenen Parameter, ob sie in der Datenbank vorhanden ist. Wenn der passende Benutzer vorhanden ist und das Passwort korrekt ist, gibt sie „true“ zurück, andernfalls gibt sie „false“ zurück

Also habe ich diese Methode in LoginController hinzugefügt, aber sie schien keine Wirkung zu haben

Also begann ich, den Implementierungsmechanismus von LoginController zu beobachten, stellte fest, dass es ein Merkmal von AuthenticatesUsers implementierte, verfolgte die Definitionsdatei dieses Merkmals und festgestellt, dass diese Datei das ist, was wir wollen

Es gibt eine Anmeldemethode darin, die für die Verarbeitung der Anmeldelogik verantwortlich ist

/**
  * Handle a login request to the application.
  *
  * @param \Illuminate\Http\Request $request
  * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response
  */
 public function login(Request $request)
 {
  // 表单验证
  $this->validateLogin($request);

  // If the class is using the ThrottlesLogins trait, we can automatically throttle
  // the login attempts for this application. We&#39;ll key this by the username and
  // the IP address of the client making these requests into this application.
  // 防止暴力破解,多次登录失败会根据IP锁定
  if ($this->hasTooManyLoginAttempts($request)) {
   $this->fireLockoutEvent($request);

   return $this->sendLockoutResponse($request);
  }
  
  // 这个就是主要的负责判断数据库中是否存在相应的账号和密码的地方,我们需要重写的就是attemptLogin方法
  if ($this->attemptLogin($request)) {
   return $this->sendLoginResponse($request);
  }

  // If the login attempt was unsuccessful we will increment the number of attempts
  // to login and redirect the user back to the login form. Of course, when this
  // user surpasses their maximum number of attempts they will get locked out.
  // 登录失败,失败次数++,防止暴力破解
  $this->incrementLoginAttempts($request);

  // 返回失败响应
  return $this->sendFailedLoginResponse($request);
 }
Nach dem Login kopieren

Nachdem wir eine Welle dieser Datei analysiert haben, haben wir festgestellt, dass die Hauptdatei Die Anmeldemethode ist die tryLogin-Methode. Schauen wir uns zunächst an, wie die ursprüngliche Methode geschrieben ist, und schreiben Sie sie dann basierend auf der ursprünglichen Methode neu:

/**
  * Attempt to log the user into the application.
  *
  * @param \Illuminate\Http\Request $request
  * @return bool
  */
 protected function attemptLogin(Request $request)
 {
  return $this->guard()->attempt(
   $this->credentials($request), $request->has(&#39;remember&#39;)
  );
 }
Nach dem Login kopieren

Nach dem Umschreiben von LoginController:

public function attemptLogin(Request $request)
 {
  $username = $request->input(&#39;username&#39;);
  $password = $request->input(&#39;password&#39;);

  // 验证用户名登录方式
  $usernameLogin = $this->guard()->attempt(
   [&#39;username&#39; => $username, &#39;password&#39; => $password], $request->has(&#39;remember&#39;)
  );
  if ($usernameLogin) {
   return true;
  }

  // 验证手机号登录方式
  $mobileLogin = $this->guard()->attempt(
   [&#39;mobile&#39; => $username, &#39;password&#39; => $password], $request->has(&#39;remember&#39;)
  );
  if ($mobileLogin) {
   return true;
  }

  // 验证邮箱登录方式
  $emailLogin = $this->guard()->attempt(
   [&#39;email&#39; => $username, &#39;password&#39; => $password], $request->has(&#39;remember&#39;)
  );
  if ($emailLogin) {
   return true;
  }

  return false;
 }
Nach dem Login kopieren

Verwenden Sie einfach die Versuchsmethode, um mehrere Urteile zu fällen. Wenn sie nicht erfolgreich ist, werden weiterhin andere Felder zur Beurteilung verwendet false

Durch Testen können Sie einen Mehrfeld-Anmeldeeffekt erzielen

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich sein wird. Bitte achten Sie auf PHP-Chinesisch Website für weitere verwandte Inhalte!

Verwandte Empfehlungen:

So implementieren Sie die SMS-Registrierung mit Larave

Wie Sie Laravel verwenden, um geplante Aufgaben umzusetzen

Das obige ist der detaillierte Inhalt vonInformationen zur Implementierung der Mehrfeld-Anmeldung in Laravel5.4. 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!