Laravel 5.3 Post-身份验证重定向的自定义路径

Laravel 5.3 Custom Path for Post-authentication Redirect

我有两类用户:"vendors" 和 "clients"。我目前正在使用 Laravel's built-in Auth Controllers(来自 make:auth 命令)进行客户端用户身份验证。

并且由于我有两种用户,我将 LoginControllerRegisterControllerResetPasswordController 上的 $redirectTo 属性 更改为 /client/home.

证明如下:

RegisterController LoginController

现在,每次我成功注册、登录和重置密码时,它都会重定向到 /client/home

但问题是当我已经在 mysite.com/client/home 时,每当我尝试通过地址栏转到 mysite.com/registermysite.com/login 时,它都会重定向到 mysite.com/home 而不是 mysite.com/client/home...

每当经过身份验证的用户尝试转到 /login/register 时,如何使其重定向到 mysite.com/client/home

最简单的选择是为您的两个登录区域创建单独的控制器。以后会更容易管理,你可以更好地自定义行为。

默认文件夹结构如下所示:

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 方法,并 return URL你想要:

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

    return url('home');
}

第二种解决方案的优点是您还可以 return 控制器操作和命名路由。我个人不喜欢路由到 URLs,就好像我决定更改它们一样,那么我将不得不在所有地方更改它们。使用控制器操作似乎是个更好的主意,但如果您稍后重构代码,您可能 运行 会遇到同样的问题。我更喜欢使用命名路由,因为我可以给它们一个合理的名称,并且永远不会再更改它们,但仍然保持我所有的重定向正常工作。