2017-04-17 249 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); } –