2017-08-08 60 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