2016-04-23 141 views

回答

3

我添加了這個功能,AuthController.php,一切都奇蹟般地固定

public function authenticated($request , $user){ 
    if($user->role=='super_admin'){ 
     return redirect()->route('admin.dashboard') ; 
    }elseif($user->role=='brand_manager'){ 
     return redirect()->route('brands.dashboard') ; 
    } 
} 
+1

我覺得值得一提的是這個方法在註冊後不會重定向用戶。 'authenticated'函數只在'AuthenticatesUsers'特性中被調用。 – SlateEntropy

2

如果您使用的是Laravel提供的認證系統,則可以覆蓋Auth\AuthController中的redirectPath方法。

例如,這將與角色「管理員」向/admin和任何其他用戶的用戶重定向到/account

public function redirectPath() 
{ 
    if (\Auth::user()->role == 'admin') { 
     return "/admin"; 
     // or return route('routename'); 
    } 

    return "/account"; 
    // or return route('routename'); 
} 

您也可以使用Laravel Authorization(在5.1.11中引入)來管理角色的邏輯。

+0

任何redirectPath()函數中的重定向會導致以下錯誤:Response.php中的ErrorException異常337行: 標題可能不包含多於一個標題,檢測到新行 – Salar

+0

您不需要返回重定向,只需要一個字符串p ath – SlateEntropy

+0

我想使用命名的路由,我不能返回任何字符串 – Salar

1

你可以這樣做處理句柄功能像這裏面的中間件RedirectIfAuthenticated.php請求:

/** 
* 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)->check()) { 
     if (Auth::user()->role == 'admin') { 
      return redirect('/admin'); 
     }else{ 
      return redirect('/'); 
     } 
    } 

    return $next($request); 
}