2016-04-23 155 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); 
}