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