全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Laravel实现用户多字段认证的解决方法

前言

本文主要给大家介绍了关于Laravel用户多字段认证的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

解决方案:

  • 登录字段不超过两个的(简单的解决方案)
  • 登录字段大于或等于三个的(相对复杂一些)

登录字段不超过两个的

我在网上看到一种相对简单解决方案,但是不能解决所有两个字段的验证:

filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'name'

过滤请求中的表单内容,实现区分 username。弊端显而易见,如果另一个不是 email 就抓瞎了……,下面是另一种通用的解决方案:

在 LoginController 中重写 login 方法

public function login(Requests $request) {
 //假设字段是 email
 if ($this->guard()->attempt($request->only('email', 'password'))) {
  return $this->sendLoginResponse($request);
 }

 //假设字段是 mobile
 if ($this->guard()->attempt($request->only('mobile', 'password'))) {
  return $this->sendLoginResponse($request);
 }

 //假设字段是 username
 if ($this->guard()->attempt($request->only('username', 'password'))) {
  return $this->sendLoginResponse($request);
 }

 return $this->sendFailedLoginResponse($request);
}

可以看到虽然能解决问题,但是显然有悖于 Laravel 的优雅风格,卖了这么多关子,下面跟大家分享一下我的解决方案。

登录字段大于或等于三个的(相对复杂一些)

首先需要自己实现一个 Illuminate\Contracts\Auth\UserProvider 的实现,具体可以参考 添加自定义用户提供器 但是我喜欢偷懒,就直接继承了 EloquentUserProvider,并重写了 retrieveByCredentials 方法:

public function retrieveByCredentials(array $credentials)
{
 if (empty($credentials)) {
  return;
 }

 // First we will add each credential element to the query as a where clause.
 // Then we can execute the query and, if we found a user, return it in a
 // Eloquent User "model" that will be utilized by the Guard instances.
 $query = $this->createModel()->newQuery();

 foreach ($credentials as $key => $value) {
  if (! Str::contains($key, 'password')) {
   $query->orWhere($key, $value);
  }
 }

 return $query->first();
}

注意: $query->where($key, $value); 改为 $query->orWhere($key, $value); 就可以了!

紧接着需要注册自定义的 UserProvider:

class AuthServiceProvider extends ServiceProvider
{
 /**
  * 注册任何应用认证/授权服务。
  *
  * @return void
  */
 public function boot()
 {
  $this->registerPolicies();

  Auth::provider('custom', function ($app, array $config) {
   // 返回 Illuminate\Contracts\Auth\UserProvider 实例...

   return new CustomUserProvider(new BcryptHasher(), config('auth.providers.custom.model'));
  });
 }
}

最后我们修改一下 auth.php 的配置就搞定了:

'providers' => [
 'users' => [
  'driver' => 'eloquent',
  'model' => App\Models\User::class,
 ],

  'custom' => [
   'driver' => 'custom',
   'model' => App\Models\User::class,
  ],
],

将 web 数组的 provider 修改为前面注册的那个 custom

'guards' => [
 'web' => [
  'driver' => 'session',
  'provider' => 'custom',
 ],

 'api' => [
  'driver' => 'passport',
  'provider' => 'users',
 ],
],

现在哪怕你有在多个字段都妥妥的…

总结

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


# laravel  # 多字段验证  # 多字段登录  # 字段验证  # Laravel实现用户注册和登录  # Laravel 5框架学习之用户认证  # Laravel重写用户登录简单示例  # Laravel框架用户登陆身份验证实现方法详解  # Laravel5.5 实现后台管理登录的方法(自定义用户表登录)  # 解决laravel5中auth用户登录其他页面获取不到登录信息的问题  # laravel-admin 管理平台获取当前登陆用户信息的例子  # Laravel多用户认证系统示例详解  # Laravel6.2中用于用户登录的新密码确认流程详解  # Laravel 微信小程序后端实现用户登录的示例代码  # Laravel用户授权系统的使用方法示例  # laravel利用中间件防止未登录用户直接访问后台的方法  # Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析  # 自定义  # 不超过  # 多字  # 我在  # 相关内容  # 多个  # 说了  # 这么多  # 不多  # 有一定  # 你有  # 给大家  # 可以看到  # 写了  # 解决问题  # 重写  # 这篇文章  # 用户提供  # 谢谢大家  # 显而易见 


相关文章: 常州企业建站如何选择最佳模板?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  制作证书网站有哪些,全国城建培训中心证书查询官网?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  制作公司内部网站有哪些,内网如何建网站?  公众号网站制作网页,微信公众号怎么制作?  如何配置IIS站点权限与局域网访问?  如何选择高效响应式自助建站源码系统?  Swift中swift中的switch 语句  香港服务器租用费用高吗?如何避免常见误区?  股票网站制作软件,网上股票怎么开户?  SQL查询语句优化的实用方法总结  如何在万网自助建站中设置域名及备案?  如何安全更换建站之星模板并保留数据?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何快速生成专业多端适配建站电话?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  建站之星导航配置指南:自助建站与SEO优化全解析  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  太平洋网站制作公司,网络用语太平洋是什么意思?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  存储型VPS适合搭建中小型网站吗?  建站之星代理费用多少?最新价格详情介绍  网站制作壁纸教程视频,电脑壁纸网站?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在万网自助建站平台快速创建网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  如何用VPS主机快速搭建个人网站?  建站之星如何修改网站生成路径?  高防服务器:AI智能防御DDoS攻击与数据安全保障  淘宝制作网站有哪些,淘宝网官网主页?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何在Golang中使用replace替换模块_指定本地或远程路径  视频网站制作教程,怎么样制作优酷网的小视频?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  如何做网站制作流程,*游戏网站怎么搭建?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  如何在企业微信快速生成手机电脑官网?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  制作网站的模板软件,网站怎么建设?  动图在线制作网站有哪些,滑动动图图集怎么做?  高性价比服务器租赁——企业级配置与24小时运维服务  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  建站168自助建站系统:快速模板定制与SEO优化指南  如何在Tomcat中配置并部署网站项目?  如何配置支付宝与微信支付功能? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。