Cet article présente principalement la méthode d'implémentation de la connexion multi-champs dans Laravel5.4. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer. au travail récemment. Une exigence est de réaliser l'effet de la connexion multi-champs, c'est-à-dire que vous pouvez vous connecter en utilisant n'importe quelle méthode de téléphone mobile ou de courrier électronique. Je vais maintenant partager le processus de solution, donc cet article vous présente principalement la mise en œuvre. de connexion multi-champs basée sur Laravel5.4. Les amis qui en ont besoin peuvent se référer aux informations pertinentes sur les fonctions. Jetons un coup d'œil ci-dessous.
Avant-proposRécemment, j'ai eu besoin d'implémenter une fonction de connexion multi-champs dans un projet. Pour faire simple, vous pouvez utiliser le nom d'utilisateur. , e-mail ou téléphone portable Connectez-vous de quelque manière que ce soit. Cet article vous présentera donc le contenu pertinent sur la connexion multi-champs Laravel5.4 et le partagera pour votre référence et votre étude. Sans plus tarder, jetons un coup d'œil à l'introduction détaillée.
Le contenu suivant est basé sur laravel5.4
La méthode est la suivante : Tout d'abord, via l'outil artisanal Generate auth module
php artisan make:auth
À ce stade, un répertoire Auth sera ajouté au répertoire AppHttpControllers. Dans ce répertoire, il y a des contrôleurs liés à l'enregistrement. et la connexion. Certains contrôleurs liés à l'enregistrement seront également générés dans le répertoire resourcesviews. Vues liées à la connexion
La documentation officielle de Laravel indique que l'authentification manuelle des utilisateurs doit utiliser la méthode de tentative de la classe IlluminateSupportFacadesAuth, comme suit :
Cette méthode déterminera la base de données en fonction des paramètres que vous transmettez. S'il existe un utilisateur correspondant, s'il existe et que le mot de passe est correct, il renvoie vrai, sinon il renvoie faux<?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'); } } }
Ensuite, j'ai ajouté cette méthode dans LoginController, mais elle semblait n'avoir aucun effet
J'ai donc commencé à observer le mécanisme d'implémentation de LoginController, j'ai découvert qu'il implémentait un trait d'AuthenticatesUsers, j'ai tracé le fichier de définition de ce trait, et j'ai trouvé que ce fichier est ce que nous voulons
Il contient une méthode de connexion, qui est responsable du traitement de la logique de connexion
Après avoir analysé une vague de ce fichier, j'ai trouvé que la méthode principale de connexion est la méthode tentativeLogin. Il suffit de réécrire cette méthode. Voyons d'abord comment la méthode originale est écrite, puis réécrivons-la en fonction de celle d'origine :/** * 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); }
/** * 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') ); }
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; }
, qui peut obtenir un effet de connexion multi-champs
Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun. plus de contenu connexe, veuillez faire attention à PHP Chinese net !
Recommandations associées :
Comment mettre en œuvre l'enregistrement par SMS avec LaraveComment utiliser Laravel pour mettre en œuvre des tâches planifiéesCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!