2016-09-16 131 views
1

我有兩種類型的用戶:「供應商」和「客戶」。而我目前使用Laravel's built-in Auth Controllers(從make:auth命令)做我的客戶端用戶認證。對認證後的Laravel 5.3自定義路徑重定向

而且因爲我有兩種用戶,我已經改變了對LoginControllerRegisterController$redirectTo屬性,ResetPasswordController/client/home

這裏是證明:

RegisterController LoginController

現在,我每次做成功註冊,登錄和密碼重置重定向到/client/home

但問題是,當我在mysite.com/client/home已經是,每當我會嘗試去mysite.com/register或通過地址欄mysite.com/login,它會重定向到mysite.com/home代替mysite.com/client/home ...

我怎樣才能讓它重定向到mysite.com/client/home每當認證的用戶嘗試訪問/login/register

回答

0

最簡單的方法就是爲您的登錄區創建單獨的控制器。稍後管理會更容易,並且您可以更好地自定義行爲。

默認的文件夾結構如下:

app 
|__Http 
    |__Controllers 
     |__Auth 
     |__ForgotPasswordController.php 
     |__LoginController.php 
     |__RegisterController.php 
     |__ResetPasswordController.php 

你可以爲你的客戶端控制器創建一個額外的文件夾,比如:

app 
|__Http 
    |__Controllers 
     |__Auth 
     | |__ForgotPasswordController.php 
     | |__LoginController.php 
     | |__RegisterController.php 
     | |__ResetPasswordController.php 
     |__Client 
     |__Auth 
      |__ForgotPasswordController.php 
      |__LoginController.php 
      |__RegisterController.php 
      |__ResetPasswordController.php 

這種方式,您可以自定義每個$redirectTo性質控制器單獨。

作爲替代解決方案,你可以覆蓋RedirectsUsers性狀的redirectPath,通過在各控制器創建一個redirectPath方法,並返回URL你想:

public function redirectPath() 
{ 
    if (\Request::is('client/*')) 
    { 
     return url('client/home'); 
    } 

    return url('home'); 
} 

本次的優點解決方案是您可以返回控制器操作和命名路由。我個人不喜歡路由到URL,就好像我決定改變它們一樣,那麼我將不得不在任何地方改變它們。使用控制器操作似乎是一個更好的主意,但如果稍後重構代碼,則可能會遇到同樣的問題。我更喜歡使用命名的路線,我可以給他們一個合理的名字,從來沒有再次更改,但仍保持我的所有重定向的工作秩序。

+0

所以,如果我做了一個客戶的具體對客戶身份驗證控制器文件夾,並針對我的路線給他們,我只需要設定自己的個人redirectTo屬性爲「客戶端/家」,我會得到我想要的輸出已經? –

+0

是的,你會的。 –