Laravel 5.5用的自带的登录程序,业务需要,在users表中增加了个是否激活的字段, active 为1是已激活,为0是未激活。
要想对这个做判断有两个方法,一个是自定写登录事件,虽然以前也写过,工作也挺正常,但是最近懒癌发作,就是不想写。
另一个方法是修改自带的登录程序,这个以前也做过,不过都改改跳转地址,帐号字段的事。网上找了一圈,有两个方法可以简单解决。
1,在LoignController中覆写authenticated方法,
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
if($user->active == 1){
// 可以登录
return redirect()->intended($this->redirectPath());
}
$this->logout($request);
}
这个方法的原理就是在用户登录成功后,去判断是否激活,没激活的直接logout。 这个方法看上去不错,可是 有个问题,既然激活的不能登录,那直接在登录前就判断出来,何必登录之后再退出呢?这不是脱了裤子放屁吗。
2,在LoginController中覆写credentials方法
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password'); // or add another item here if it's from the request
$credentials['can_login'] = 1;
return $credentials;
//return $request->only($this->username(), 'password');
}
这个方法是告诉程序通过哪几个条件查询用户记录,在用户登录时要去数据表里查询相关记录时加上是否激活的限制,没激活的自然是查不记录的,就会返回false。也就不用登录了。
达到目的。
-完-