Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung zur Implementierung der Mehrfeld-Anmeldung in Laravel5.4

Ausführliche Erklärung zur Implementierung der Mehrfeld-Anmeldung in Laravel5.4

*文
*文Original
2018-01-03 15:28:411367Durchsuche

Ich bin vor Kurzem auf die Notwendigkeit gestoßen, den Effekt der Mehrfeld-Anmeldung zu erkennen, das heißt, Sie können sich mit jeder Methode per Mobiltelefon oder E-Mail anmelden. Jetzt werde ich den Lösungsprozess teilen Es stellt Ihnen hauptsächlich die relevanten Informationen zur Implementierung der Mehrfeld-Anmeldefunktion auf Basis von Laravel5.4 vor. Lassen Sie uns gemeinsam einen Blick darauf werfen. Ich hoffe, es hilft allen.

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, die sich auf die Registrierung beziehen und Anmeldung. Einige registrierungsbezogene Controller werden auch im Verzeichnis resourcesviews generiert.

Die offizielle Dokumentation von Laravel besagt, dass die manuelle Authentifizierung von Benutzern die Versuchsmethode der IlluminateSupportFacadesAuth-Klasse verwenden muss:

<?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;);
  }
 }
}

Diese Methode ermittelt die Datenbank basierend auf den von Ihnen übergebenen Parametern. Ob es einen passenden Benutzer gibt, wenn dieser existiert und das Passwort korrekt ist, wird true zurückgegeben, andernfalls wird false zurückgegeben

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

Also begann ich, den LoginController-Implementierungsmechanismus zu beobachten, stellte fest, dass er ein Merkmal von AuthenticatesUsers implementiert, 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);
 }

Nachdem ich eine Welle dieser Datei analysiert habe, habe ich festgestellt dass die Hauptmethode zum Anmelden die tryLogin-Methode ist. 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 Nach dem Umschreiben von LoginController:

/**
  * 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;)
  );
 }

Verwenden Sie einfach die Versuchsmethode, um mehrere Urteile zu fällen. Solange sie erfolgreich ist, wird true zurückgegeben. Wenn beides nicht erfolgreich ist, verwenden Sie weiterhin andere Felder Sind sie nicht erfolgreich, wird ein Flase-Test zurückgegeben

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;
 }
, der einen Mehrfeld-Anmeldeeffekt erzielen kann

Verwandte Empfehlungen:

Laravel 5.5 Wie verwende ich die entsprechende Schnittstelle?

Laravel 5.5 implementiert Front- und Backend-Anmeldung

Laravel führt wiederholt dieselbe Warteschlangenaufgabe aus Grund

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zur Implementierung der Mehrfeld-Anmeldung in Laravel5.4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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