怎样使artisan make:auth生成的登录注册功能中登录可以多字段查询登录?

请问在laravel框架中,使用artisan make:auth生成登录注册功能只能通过邮箱登录,那么如何更改代码,使其能够既能用用户名也能用邮箱,还能用电话登录。看了相关文档,没有想出来解决办法。请问大神们知道如何更改么?

  1. 一定是在make:auth的基础上修改。

  2. 给出修改的思路也行。

阅读 3.5k
2 个回答

该问题已经解决,解决方案如下:
在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就可以填写任何了 但是如果你想验证手机啥的需要自己写

我也不知道对不对 没去验证 也才刚开始学习 反正他就那么几个文件 你可以看他登录到底执行了哪些方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题