将自定义 where 子句添加到身份验证用户特征 Laravel



我们决定将Laravel用于项目作为未来框架的测试运行,并且非常喜欢它。不过,我们遇到了一个问题。

我们使用处理user authentication的特质IlluminateFoundationAuthAuthenticatesUsers。效果很好。但是,我们在数据库中有一个名为userstatus的列,它可以是01

我们如何将此 where 子句注入IlluminateFoundationAuthAuthenticatesUsers特征中?

我在想也许这里有一些事情(在我的LoginController(:

public function authenticated($request , $user){
  //if $user->userstatus != 1 logout and redirect to start page
}

但我不知道如何logout(我现在正在研究(。

你的逻辑是正确的,你应该重新定义login并在LoginControllerauthenticated方法。

您的方法应如下所示:

此方法应该在您的LoginController.php范围内:

    class LoginController extends Controller
    {
        use AuthenticatesUsers {
            login as public loginParent;
        }
        protected function login(Request $request){
            $default = '/';
            $user = User::where('email', $request->get('email'))->NotActive->first();
            if($user){
               return redirect()->intended($default);
            }
           return $this->loginParent($request);
        }

    protected function authenticated(Request $request, $user)
    {
        if($user->not_active) {
             $this->logout($request);
        }
    }
 }

那么我们应该User.php模型中创建ScopeNotActive方法作为局部范围:

//User.php
     public function ScopeNotActive($query){
          return $query->where('userStatus', '!=', 1);
        }

和一个突变器来检查用户是否处于活动状态:

// User.php
       public function getNotActiveAttribute(){
          return $this->userStatus != 1;
       }

最新更新