在laracasts的14期视频中,作者讲述了在Laravel中如何使用默认的Auth控制器来快速构造用户验证的功能。
其中我发现,这个Auth控制器默认情况,并不会在登录时检测用户输入的用户名是否为邮箱(默认登录字段为邮箱)
这导致用户输入其他字段的时候也会进入到数据库进行查询。
下面是一个在不修改原有vendor下AuthenticatesUsers的方式(低耦合)来实现检查登录字段是否为邮件功能
在AuthController.php,找到下面的代码
use AuthenticatesAndRegistersUsers, ThrottlesLogins
修改为:
use AuthenticatesAndRegistersUsers, ThrottlesLogins {
AuthenticatesAndRegistersUsers::postLogin as parentPostLogin;
}
上面做的目的是把AuthenticatesAndRegistersUsers(其实这个类继承了AuthenticatesUsers)的postLogin修改为parentPostLogin,方便我们对postLogin进行重写。
然后我们在AuthController.php中重写postLogin方法,进行我们的Email验证,并且在把流程归还给原先的parentPostLogin
public function postLogin(Request $request)
{
$this->validate($request, [
$this->loginUsername() => 'email'
]);
return $this->parentPostLogin($request);
}
然后运行成功
其实这里面主要是要看懂和学会php的trait新特性,也就是多继承