2017-04-17 202 views
0

我正在为我的大学创建学生门户。登录后在登录路由上自定义登录重定向 - laravel

此门户中有多个用户,例如学生,教师,工作人员,&管理。

我已经成功地创建基于乘用户 如 当学生登录他重定向本地主机上定制登录重定向:8000 /学生/仪表板类似的老师重定向在localhost:8000 /教师/仪表板 .. ..

LoginController.php(完美作品登录后)

public function redirectTo() 
{ 
    $userRollId = Auth::user()->user_role_id; 

    if($userRollId == 1) 
    { 
      return route('administrationDashboard'); 
    } 
    elseif ($userRollId == 2) { 

      return route('teacherDashboard'); 
    } 
    elseif ($userRollId == 3) { 
      return route('studentDashboard'); 
    } 
    elseif ($userRollId == 4) { 
      return route('departmentalStaffDashboard'); 
    } 
    elseif ($userRollId == 4) { 
      return 'departmentalStaff/dashboard';  
    } 
} 

但我面临的问题,而我测试我的应用程序。

高级是 我登录的学生和登录后重定向 http://localhost:8000/student/dash-board

对于测试时,我打本地主机:8000 /登录 其重定向到localhost:8000 /家 应该在本地主机重定向: 8000 /学生/仪表板但不:(

我想的LoginController逻辑不登录后在此应用。 可能的LoginController逻辑只有当我们尝试登录应用。

所以有任何解决方案或建议?

+0

您是否使用laravel'Auth'中间件? – hassan

+0

检查你的认证控制器是否有一个受保护的变量$ redirecTo你必须改变它 –

+0

你在登录路径中使用'guest'中间件吗? –

回答

1

我假设你正在使用laravel的LoginController。在LoginController中,它将guest中间件附加到除logoutCheck Here)以外的所有路由。

所以你必须添加代码到\App\Http\Middleware\RedirectIfAuthenticated类。

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

     if($userRollId == 1) 
     { 
      return route('administrationDashboard'); 
     } 
     elseif ($userRollId == 2) { 

      return route('teacherDashboard'); 
     } 
     elseif ($userRollId == 3) { 
      return route('studentDashboard'); 
     } 
     elseif ($userRollId == 4) { 
      return route('departmentalStaffDashboard'); 
     } 
     elseif ($userRollId == 4) { 
      return 'departmentalStaff/dashboard'; 
     } 
    } 

    return $next($request); 
} 

更好的事情是建立一个静态函数:

Class Helper { 
    public static function redirectByRole($userRollId) { 
     if($userRollId == 1) 
      { 
       return route('administrationDashboard'); 
      } 
      elseif ($userRollId == 2) { 

       return route('teacherDashboard'); 
      } 
      elseif ($userRollId == 3) { 
       return route('studentDashboard'); 
      } 
      elseif ($userRollId == 4) { 
       return route('departmentalStaffDashboard'); 
      } 
      elseif ($userRollId == 4) { 
       return 'departmentalStaff/dashboard'; 
      } 
     } 
    } 
} 

,并调用它是这样的:

从你的控制器:

public function redirectTo() 
{ 
    $userRollId = Auth::user()->user_role_id; 

    return Helper::redirectByRole($userRollId); 
} 

RedirectIfAuthenticated中间件:

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

     return Helper::redirectByRole($userRollId); 
    } 

    return $next($request); 
} 
+0

感谢它为我工作:)我只是修改代码一点,它的作品完美的,因为我想:) RedirectIfAuthenticated.php 如果(AUTH ::后卫($后卫) - >检查()){ $ userRollId = Auth :: user() - > user_role_id; if($ userRollId == 1) { return redirect() - > route('administrationDashboard'); } ... ... } return $ next($ request); } –