2017-09-13 167 views
0

我有三種類型的應用程序用戶,每個都有自己的dashboard。我需要檢查管理員或任何其他用戶無法看到其他用戶儀表板。Laravel重定向如果經過身份驗證的中間件

有一箇中間件RedirectIfAuthenticated

guest中間件
public function handle($request, Closure $next, $guard = null){ 

    if (Auth::guard($guard)->check() && auth()->user()->type == 'admin'){ 
     return redirect('/admin'); 
    } 

    if (Auth::guard($guard)->check() && auth()->user()->type == 'author'){ 
     return redirect('/author'); 
    } 

    if (Auth::guard($guard)->check() && auth()->user()->type == 'client'){ 
     return redirect('/client'); 
    } 
} 

它。

上面的代碼對我來說似乎很好但是當我測試它時,瀏覽器說Too many redirects

我在做什麼錯,什麼是最好的方式來處理它。

+0

沒有任何答案的工作? –

+0

@BasheerAhmedKharoti沒有人工作 – Gammer

+0

你能粘貼路線代碼嗎? –

回答

1

您可能誤解了該中間件的用途。 RedirectIfAuthenticated的目的是將用戶重定向到默認的身份驗證頁面。這並不意味着阻止未經身份驗證/未經授權的用戶訪問特定區域。

如果沒有授權,你需要做的是重定向。由於這是一個簡單的例子,你可以只是有一箇中間件:

class RequireRole { 
    public function handle($request, Closure $next, $role) { 
      abort_unless(auth()->check() && auth()->user()->type == $role, 403, "You don't have permissions to access this area"); 
      return $next($request); 
    } 
} 

然後在你的Kernel.php

protected $routeMiddleware = [ 
     //Other middleware 
     "requirerole" => RequireRole::class 
]; 

註冊這個中間件然後你就可以在你的路由例如使用

Route::get('/admin', function() { /* action */ })->middleware("requirerole:admin"); 

但是,如果你需要更復雜的規則發現自己然後看看Authorization

+0

完美........ – Gammer

0

需要修改一下代碼

public function handle($request, Closure $next, $guard = null){ 

     if (Auth::guard($guard)->check() && auth()->user()->type == 'admin'){ 
      return redirect('/admin'); 
     } 

     if (Auth::guard($guard)->check() && auth()->user()->type == 'author'){ 
      return redirect('/author'); 
     } 

     if (Auth::guard($guard)->check() && auth()->user()->type == 'client'){ 
      return redirect('/client'); 
     } 
     return $next($request); 
} 
0

您必須添加額外的檢查每一個if語句,看看你是不是已經在那裏它會重定向到

也許路線是這樣的:

&& $request->is('admin') 
0

只是分割你的支票,並保持原有的回報:

 public function handle($request, Closure $next, $guard = null){ 
      if (Auth::guard($guard)->check()){ 

       if(Auth::user()->type == 'admin'){ 
        return redirect('/admin'); 
       } 
       if(Auth::user()->type == 'author'){ 
        return redirect('/author'); 
       } 
       if(Auth::user()->type == 'client'){ 
        return redirect('/client'); 
       } 
      } 
      return $next($request); 
    } 
+0

同樣的問題...... – Gammer

+0

@Gammer亞倫條件是好的如果你沒有客人中間件的任何這些路線'管理員,作者和客戶端.. –

相關問題