如何在Laravel中对用户多字段进行认证

  介绍

如何在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中对用户多字段进行认证