前言

本文主要给大家介绍了关于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小时内与您取得联系。