向AuthenticatesUser Trait Laravel添加自定义where子句

时间:2019-06-05 22:11:23

标签: laravel authentication

我们已决定将$("foo").find($("bar"))用于一个项目,作为对未来框架的测试运行,并且真的很喜欢它。不过,我们有一个问题。

我们使用处理Laravel的特征Illuminate\Foundation\Auth\AuthenticatesUsers。它运作良好。但是,我们在数据库中有一列名为user authentication的列,它可以是userstatus0

我们如何将where子句注入1特性中?

我在想这里(在我的Illuminate\Foundation\Auth\AuthenticatesUsers中):

LoginController

但是我不知道该怎么public function authenticated($request , $user){ //if $user->userstatus != 1 logout and redirect to start page } (我现在正在研究)。

1 个答案:

答案 0 :(得分:0)

您的逻辑是正确的,您应该在login中重新定义authenticatedLoginController方法。

您的方法应如下所示:

此方法应在您的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);
        }
    }
 }

然后,我们应该在ScopeNotActive模型中创建User.php方法作为本地范围:

//User.php
     public function ScopeNotActive($query){

          return $query->where('userStatus', '!=', 1);
        }

和一个Mutator来检查用户是否不活跃:

// User.php
       public function getNotActiveAttribute(){

          return $this->userStatus != 1;
       }