2016-04-30 147 views
0

我正在創建一箇中間件,用於檢查用戶當前是否登錄並且是超級管理員。在中間件中,我如何獲取當前登錄的用戶?

這是我的中間件代碼。

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Auth; 

class CheckAdmin 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param string|null $guard 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     if (Auth::guard($guard)->guest()) { 

      // also need to check a field of user 

      return redirect()->guest('login'); 
     } else { 
      return $next($request); 
     } 
    } 
} 

其實,這是一樣的默認中間件進行身份驗證(即「權威性」)

它的工作很好,當我在應用程序的路由使用它。 (app/Http/routes.php)

我需要使用它與cuddy plugin中間件選項。它應該只重定向訪客用戶,但事實並非如此。請幫忙!默認情況下,檢查

回答

0

身份驗證的中間件,如果用戶是來賓和重定向他到登錄頁面看到下面

if (Auth::guard($guard)->guest()) { 
     if ($request->ajax() || $request->wantsJson()) { 
      return response('Unauthorized.', 401); //if ajax request 
     } else { 
      return redirect()->guest('login'); //redirect 
     } 
    } 

現在如果ü要檢查,如果用戶登錄並點擊此處查看一些用戶領域應該如何

public function handle($request, Closure $next, $guard = null) 
{ 
    if(Auth::check()) { //If is logged in 
     $user = Auth::user(); 
     if($user->isSuperAdmin()) 
      return $next($request); 
    } 
    return redirect('/whatever'); 
} 

如果您附加'auth'中間件+此自定義中間件。您可以在自定義中間件中擺脫「Auth :: check()」。

Route::group(['middleware' => ['web', 'auth', 'custom']], function() { 
    Route::get('/url/only/for/super/users', '[email protected]'); 
}); 

public function handle($request, Closure $next, $guard = null) 
{ 
     $user = Auth::user(); 
     if($user->isSuperAdmin()) 
      return $next($request); 
    return redirect('/whatever'); 
} 
0

中有許多laravel輔助功能,你可以在任何地方使用像AUTH()幫手,see helpers。所以你可以在任何地方使用這個代碼:

auth()->user(); 
相關問題