2017-08-08 58 views
0

我在的LoginController修改登录功能的工作,这就是我写验证不自定义中间件

public function login(Request $request) 
{ 
    $data = $request->all(); 
    if($this->validateLogin((array)$data)) 
    { 
     $cred = $request->email; 
     $cred_p = $request->password; 

     //if() 
     $user = User::select('id', 'password')->where('email','=',$cred)->first(); 

     if(count($user) == 1) 
     { 
      if(Hash::check($cred_p, $user->password)) 
      { 
       $user_id = $user->id; 

       $status = User_status::select('is_active', 'is_completed')->where('user_id','=',$user_id)-> first(); 

       $active = $status->is_active; 
       //dd($status->is_active); 
       if($active == 0) 
       { 
        return redirect()->to('/login')->withErrors(['status'=>"Your account is blocked. Please contact administrator or visit here <a href='/support/acount-blocked'>Support Center</a>"]); 
       } 
       else 
       { 
         $this->attemptLogin($request); 

         $this->sendLoginResponse($request);     
       } 
      } 
      else 
      { 
       if ($this->hasTooManyLoginAttempts($request)) { 
        $this->fireLockoutEvent($request); 

        return $this->sendLockoutResponse($request); 
       } 
       $this->incrementLoginAttempts($request); 
       return $this->sendFailedLoginResponse($request); 
      } 

     } 
     else 
     { 
      return $this->sendFailedLoginResponse($request); 
     } 
    } 
    else 
    { 
     return $this->sendFailedLoginResponse($request); 
    } 
} 

这似乎很好地工作和Auth::user()工作,但是当我添加新的中间件是IsCompletedMiddleware我检查dd(Auth::user());这将返回空值。

public function handle($request, Closure $next) 
{ 

    /*if(Auth::user()->status->is_completed == 0) 
    { 
     return redirect()->to('/profile/management/complete'); 
    }*/ 
    return $next($request); 
} 

我还在中间件的头文件中包含了use Auth;,但它总是返回空值。并在其他控制器Auth::user()返回适当的用户。这是为什么?缺少什么。请帮助谢谢你。

+0

尝试使用全球帮手'AUTH() - >用户()'在中间件 –

+0

空值:(从未遇到过这样的问题我认为自定义登录功能与它有关 – Alen

+0

我已经搜索了你的问题[answer-er](https://stackoverflow.com/questions/35160144/authuser-returns-null )建议添加'web'中间件以访问'Auth :: user()' –

回答

0

在中间件你必须让用户在做请求,尝试这样做:

public function handle($request, Closure $next) 
{ 
    $request = $next($request); 
    if($request->user()->status->is_completed == 0){ 
     return redirect()->to('/profile/management/complete'); 
    } 

    return $request; 
} 
+0

仍然为空值bro – Alen

+0

您将什么中间件添加到您的路线? –

+0

- >中间件('myware'); – Alen