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(['email' => $email, 'password' => $password])) { // Authentication passed... return redirect()->intended('dashboard'); } } }
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'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 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('remember') ); }
Nach dem Umschreiben von LoginController:
public function attemptLogin(Request $request) { $username = $request->input('username'); $password = $request->input('password'); // 验证用户名登录方式 $usernameLogin = $this->guard()->attempt( ['username' => $username, 'password' => $password], $request->has('remember') ); if ($usernameLogin) { return true; } // 验证手机号登录方式 $mobileLogin = $this->guard()->attempt( ['mobile' => $username, 'password' => $password], $request->has('remember') ); if ($mobileLogin) { return true; } // 验证邮箱登录方式 $emailLogin = $this->guard()->attempt( ['email' => $username, 'password' => $password], $request->has('remember') ); if ($emailLogin) { return true; } return false; }
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!