介绍
如何在Laravel中对用户多字段进行认证?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>解决方案:强>
- <李>
登录字段不超过两个的(简单的解决方案)
李> <李>登录字段大于或等于三个的(相对复杂一些)
李> <>强登录字段不超过两个的强>
我在网上看到一种相对简单解决方案,但是不能解决所有两个字段的验证:
使用filter_var(美元请求→输入(& # 39;登录# 39;),,FILTER_VALIDATE_EMAIL), ?, & # 39;电子邮件# 39;,:,& # 39;名字# 39;
过滤请求中的表单内容,实现区分用户名。弊端显而易见的,如果另一个不是电子邮件就抓瞎了……,下面是另一种通用的解决方案:
<强>在LoginController中重写登录方法强>
public function 登录(Requests $请求),{ ,//假设字段是,电子邮件 护,if ($ this→()→尝试(仅请求→美元(& # 39;电子邮件# 39;,,& # 39;密码# 39;))),{ return 才能;这→美元sendLoginResponse($请求); ,} ,//假设字段是,移动 护,if ($ this→()→尝试(仅请求→美元(& # 39;移动# 39;,,& # 39;密码# 39;))),{ return 才能;这→美元sendLoginResponse($请求); ,} ,//假设字段是,用户名 护,if ($ this→()→尝试(仅请求→美元(& # 39;用户名# 39;,,& # 39;密码# 39;))),{ return 才能;这→美元sendLoginResponse($请求); ,} ,return 这→美元sendFailedLoginResponse($请求); }
可以看到虽然能解决问题,但是显然有悖于Laravel的优雅风格,卖了这么多关子,下面跟大家分享一下我的解决方案。
登录字段大于或等于三个的(相对复杂一些)
首先需要自己实现一个照亮\合同\ Auth \ UserProvider的实现,具体可以参考添加自定义用户提供器但是我喜欢偷懒,就直接继承了EloquentUserProvider,并重写了retrieveByCredentials方法:
public function retrieveByCredentials (array 凭证美元) { (空,if (凭证)美元),{ 返回才能; ,} ,//First will 我方表示歉意add each credential element 用,query as a where 条款。 ,//Then 还要execute 我方表示歉意,query ,, if found a 用户,我方表示歉意,return it 拷贝 ,//Eloquent User “model", that will be utilized by 从而Guard 实例。 美元,美元query =,这→createModel ()→newQuery (); 美元,foreach (credentials as  key 美元;=祝辞,美元值),{ if 才能;(!,Str:包含(键,美元,& # 39;密码# 39;)),{ 美元,才能查询→orWhere(键,美元,美元值); ,,} ,} 首先,return 查询→美元(); }
<>强注意:强>将<代码>查询→美元(键,美元价值);> 代码改为<代码>查询→美元orWhere(键,价值美元);> 代码就可以了!
紧接着需要注册自定义的UserProvider:
class AuthServiceProvider extends ServiceProvider {/* * *,才能注册任何应用认证/授权服务。 ,* *,才能@return 空白 ,*/,public function 引导() ,{ 这个美元才能→registerPolicies (); 身份验证才能::提供者(& # 39;定制# 39;,,function (app,美元,array 配置美元),{ ,,//,返回,照亮\合同\ Auth \ UserProvider 实例… ,,return new  CustomUserProvider (new BcryptHasher(),配置(& # 39;auth.providers.custom.model& # 39;)); ,,}); ,} }
最后我们修改一下身份验证。php的配置就搞定了:
& # 39;提供者# 39;,=祝辞,( ,& # 39;用户# 39;,=祝辞,( & # 39;才能司机# 39;,=祝辞,& # 39;雄辩的# 39; & # 39;才能模型# 39;,=祝辞,模型应用\ \用户::类, ,), & # 39;才能定制# 39;,=祝辞,( ,,& # 39;司机# 39;,=祝辞,& # 39;定制# 39; ,,& # 39;模型# 39;,=祝辞,App \ \用户模型::类, ,,, ],
将web数组的提供者修改为前面注册的那个自定义
& # 39;警卫# 39;,=祝辞,( ,& # 39;网络# 39;,=祝辞,( & # 39;才能司机# 39;,=祝辞,& # 39;会话# 39; & # 39;才能提供者# 39;,=祝辞,& # 39;定制# 39; ,), ,& # 39;api # 39;,=祝辞,( & # 39;才能司机# 39;,=祝辞,& # 39;护照# 39; & # 39;才能提供者# 39;,=祝辞,& # 39;用户# 39; ,), ],如何在Laravel中对用户多字段进行认证