2016-11-12 69 views
0

我需要檢查用戶是否已登錄,並在我的中間件中檢查其用戶名,以驗證他們是否是管理員或不限制訪問某個頁面。我如何獲得他們的用戶名?檢查Laravel中間件的用戶名

使用Auth :: user()給我一個來自另一箇中間件的錯誤。

ErrorException in VerifyCsrfToken.php line 136: 
Trying to get property of non-object 

路線

Route::get('admin', ['middleware' => 'admin', function() { 
    echo "You're an admin!"; 
}]); 

中間件

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
      if (Auth::user()->username == "enayet123") 
       return $next($request); 
    } 
} 
+0

您可以顯示您的路由文件! –

+0

我真的不明白爲什麼路線文件會影響這個? –

+1

你的laravel版本是什麼? –

回答

0

你必須返回

return $next($request); 

即使你的條件未能因此,未來中間件可以請求。如果您將該條件移到條件之外,應該解決您的問題。

您的代碼應該是這樣的:

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
      if (Auth::user()->username == "enayet123") { 
       // Do the thing you want ... (return or redirect to somewhere else) 
       redirect()->route('homepage'); 
      } 
      return $next($request); 
    } 
} 

你應該總是return $next($request)這是需要從一個特定的中間件

+0

如果中間件的用戶名是「enayet123」,那麼中間件就意味着將請求傳遞到下一個中​​間件,這就是我爲什麼這樣做的原因。如果檢查失敗,用戶應該被重定向到主頁'/' –

+0

@EnayetHussain - 檢查上面更新的代碼並嘗試實施它,它應該解決您的問題 –

0

通過代碼/請求爲了獲得用戶的詳細信息,如用戶名/向您發送電子郵件需要使用$請求 - >用戶()而不是驗證::用戶()

你應該那麼如果用戶檢查是一個管理員,通過在用戶模型中創建一個方法並在中間件中調用該方法

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     $user = $request->user(); 
     if ($user && $user->isAdmin()) { 
      return $next($request); 
     } 
     return redirect('/'); 
    } 
}