Maison > développement back-end > tutoriel php > Sur la façon d'implémenter la connexion multi-champs dans Laravel5.4

Sur la façon d'implémenter la connexion multi-champs dans Laravel5.4

不言
Libérer: 2023-04-01 06:32:02
original
1041 Les gens l'ont consulté

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([&#39;email&#39; => $email, &#39;password&#39; => $password])) {
   // Authentication passed...
   return redirect()->intended(&#39;dashboard&#39;);
  }
 }
}
Copier après la connexion

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&#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);
 }
Copier après la connexion

Après avoir réécrit 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;)
  );
 }
Copier après la connexion

Utilisez simplement la méthode de tentative pour porter plusieurs jugements. Tant qu'elle réussit, elle retournera vrai. Si elle échoue, continuez à utiliser d'autres champs pour juger si les deux. Si cela échoue, il renverra le test flase
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;
 }
Copier après la connexion

, 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 Larave


Comment utiliser Laravel pour mettre en œuvre des tâches planifiées


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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal