2016-03-08 163 views
2

有多個用戶,擁有完全不同的後登錄面板。一個教師和其他學生。我讓中間件分開他們的觀點。中間件檢查名爲實體的屬性(數據庫中的列)是「學生」還是「公司」,並相應地限制或允許視圖。是的,訪客不允許登錄後面板。Laravel 5 - 註冊後重定向到URL

我使用同一個表來保存登錄。 (實體欄目是否區分其教師或學生)。現在我想將用戶重定向到不同的視圖。如果我改變$redirectTo = "/studentPanel"。中間件行爲和教師登錄無法訪問此。但是,如果我硬編碼$redirectTo = "/teacherPanel",那麼學生登錄面板不可訪問。

如何動態設置$redirectTo。我想到設置auth控制器的構造方法。

嘗試這樣做:

public function __construct(Request $request) { 

$this->middleware('guest', ['except' => 'getLogout']); 

if(Auth::user() && $request->user()->isStudent()) 
    $this->redirectTo = "/studentPanel"; 
elseif(Auth::user() && $request->user()->isTeacher()) 
    $this->redirectTo = "/teacherPanel"; 
else 
     $this->redirectTo = "/auth/login"; 

}

這裏isStudent()和isCompany是在應用\用戶功能,其與真或假檢查在數據庫實體列值作出響應。

我想這樣,我得到錯誤"Call to a member function isStudent() on a non-object"

+0

'$請求 - >用戶()'是無效的錯誤說 - 看看在[路由文檔(https://開頭laravel。 COM /文檔/ 5.2 /路由#路線模型結合)。 – ash

+0

感謝讓我檢查@ash,並且有一件事是我的想法是正確的動態路由?它會工作嗎? –

+0

這是不正確的,我有一個想法,我會張貼一個答案看看它,讓我知道, –

回答

1

您需要更改$request->user()Auth::user()

從那裏,我遇到了一個非常類似的問題,當時我發現的最佳解決方案是將$redirectTo設置爲靜態值,並且在路徑中查找用戶是學生還是老師並進行適當的重定向。

的路線是這樣的:

public function getRedirect() 
{ 

    if (Auth::user() && Auth->user()->isStudent()) { 
     return redirect("/studentPanel"); 
    } else if(Auth::user() && Auth->user()->isTeacher()) { 
     return redirect("/teacherPanel"); 
    } else { 
     return redirect("/auth/login"); 
    } 
} 
+0

你想改變供應商/這個文件中的symfony/http-kernel/DataCollector/RouterDataCollector.php? –

+0

除非沒有其他選項,否則我不會觸摸供應商中的任何文件。我想象這種方法在你的控制器中進行,並創建一個URL,如'/ controller/redirect',你可以將它設置爲'$ redirectTo'的值 –