基于Laravel5.4实现多字段登录功能方法示例

发布时间 - 2026-01-11 02:45:00    点击率:

前言

最近在一个项目中需要实现一个多字段登录功能,简单来说就是可以使用用户名、邮箱或手机号任意一种方式进行登录。所以本文就来给大家介绍了关于Laravel5.4多字段登录的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。

以下内容基于laravel5.4

方法如下:

首先,通过artisan工具生成auth模块

php artisan make:auth

这时候App\Http\Controllers目录下会新增一个Auth目录,该目录下为注册登录相关的控制器,resources\views目录下也会生成一些与注册登录相关的视图

laravel的官方文档中说手动认证用户需要使用Illuminate\Support\Facades\Auth类的attempt方法,如下:

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

这个方法会根据你传入的参数判断数据库中是否存在与之相匹配的用户,如果存在并且密码正确返回true,反之返回false

遂在LoginController中添加该方法,但是好像并没有效果

于是开始观察LoginController的实现机制,发现它实现了一个AuthenticatesUsers的trait,追踪到这个trait的定义文件,发现这个文件就是我们想要的东西

里面有一个login方法,就是负责处理登录的逻辑

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

分析了一波这个文件,发现主要进行登录判断的就是attemptLogin方法,我们只要重写这个方法即可,先看看原来的是怎么写的,根据原来的进行重写:

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

在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;
 }

只需要用attempt方法进行多次判断即可,只要成功就返回true,不成功继续用其他字段进行判断,都不成功则返回flase

测试,可以实现多字段登录效果

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# laravel  # 多字段登录  # 多字段验证  # laravel5.4  # 用户登录  # Laravel 5.4重新登录实现跳转到登录前页面的原理和方法  # Laravel5.2使用Captcha生成验证码实现登录(session巨坑)  # laravel5.2实现区分前后台用户登录的方法  # laravel5实现微信第三方登录功能  # Laravel5.5 实现后台管理登录的方法(自定义用户表登录)  # 解决laravel5中auth用户登录其他页面获取不到登录信息的问题  # laravel 5.3 单用户登录简单实现方法  # Laravel5.4框架使用socialite实现github登录的方法  # Laravel 5.5 实现禁用用户注册示例  # Laravel5.1 框架登录和注册实现方法详解  # 多字  # 重写  # 目录下  # 数据库中  # 是否存在  # 的是  # 都不  # 也会  # 相关内容  # 说了  # 不多  # 只需  # 给大家  # 要用  # 可以使用  # 可以实现  # 与之  # 这篇文章  # 就来  # 谢谢大家 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  西安专业网站制作公司有哪些,陕西省建行官方网站?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  北京网站制作的公司有哪些,北京白云观官方网站?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  中山网站制作网页,中山新生登记系统登记流程?  Swift中switch语句区间和元组模式匹配  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  大连 网站制作,大连天途有线官网?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何用AI帮你把自己的生活经历写成一个有趣的故事?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  JavaScript如何实现类型判断_typeof和instanceof有什么区别  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel如何实现文件上传和存储?(本地与S3配置)  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  高防服务器租用如何选择配置与防御等级?  如何有效防御Web建站篡改攻击?  b2c电商网站制作流程,b2c水平综合的电商平台?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在宝塔面板创建新站点?  黑客如何利用漏洞与弱口令入侵网站服务器?  如何在阿里云高效完成企业建站全流程?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何快速搭建高效简练网站?  Laravel如何实现多对多模型关联?(Eloquent教程)  bootstrap日历插件datetimepicker使用方法  如何快速辨别茅台真假?关键步骤解析  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  如何获取上海专业网站定制建站电话?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  如何在万网ECS上快速搭建专属网站?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  免费网站制作appp,免费制作app哪个平台好?