84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
请问在laravel框架中,使用artisan make:auth生成登录注册功能只能通过邮箱登录,那么如何更改代码,使其能够既能用用户名也能用邮箱,还能用电话登录。看了相关文档,没有想出来解决办法。请问大神们知道如何更改么?
一定是在make:auth的基础上修改。
给出修改的思路也行。
学习是最好的投资!
该问题已经解决,解决方案如下:在AuthController控制器中,use那两个trait的下面,添加如下代码
/** * 设置登录时前端页面提交的“用户名”的变量名为$login * * @var string */ protected $username = 'login'; /** * 重写获得登录数据的getCredentials方法,判断第一条数据的类型 * * @param Requset $request * @return array */ protected function getCredentials(Request $request){ $login = $request -> get('login'); $middle = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'name'; $field = filter_var($login, FILTER_VALIDATE_INT) ? 'phone' : $middle; return [ $field => $login, 'password' => $request->get('password'), ]; }
此方法重写了引入的AuthenticatesAndRegistersUsers类中引入的AuthenticatesUsers类中的getCredentials方法,该方法作用是返回login方法中调用的的attempt方法验证信息所使用的$credentials数组变量。要注意,最终$field索引变量所对应的$login变量必须与数据库中users表中所需要的字段一致。
AuthenticatesUsers.php 里面的
protected function validateLogin(Request $request) { $this->validate($request, [ $this->loginUsername() => 'required', 'password' => 'required', ]); }
你看上面 他只对用户名和密码做了必填的验证 至于emial类型并没做验证 所以看html代码
<input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}">
看上面的type类型 email 你改成text就可以填写任何了 但是如果你想验证手机啥的需要自己写
我也不知道对不对 没去验证 也才刚开始学习 反正他就那么几个文件 你可以看他登录到底执行了哪些方法
该问题已经解决,解决方案如下:
在AuthController控制器中,use那两个trait的下面,添加如下代码
此方法重写了引入的AuthenticatesAndRegistersUsers类中引入的AuthenticatesUsers类中的getCredentials方法,该方法作用是返回login方法中调用的的attempt方法验证信息所使用的$credentials数组变量。要注意,最终$field索引变量所对应的$login变量必须与数据库中users表中所需要的字段一致。
AuthenticatesUsers.php 里面的
你看上面 他只对用户名和密码做了必填的验证 至于emial类型并没做验证 所以看html代码
看上面的type类型 email 你改成text就可以填写任何了 但是如果你想验证手机啥的需要自己写
我也不知道对不对 没去验证 也才刚开始学习 反正他就那么几个文件 你可以看他登录到底执行了哪些方法