Laravel 5.3 Post-身份验证重定向的自定义路径
Laravel 5.3 Custom Path for Post-authentication Redirect
我有两类用户:"vendors" 和 "clients"。我目前正在使用 Laravel's built-in Auth Controllers
(来自 make:auth
命令)进行客户端用户身份验证。
并且由于我有两种用户,我将 LoginController
、RegisterController
和 ResetPasswordController
上的 $redirectTo
属性 更改为 /client/home
.
证明如下:
RegisterController
LoginController
现在,每次我成功注册、登录和重置密码时,它都会重定向到 /client/home
。
但问题是当我已经在 mysite.com/client/home
时,每当我尝试通过地址栏转到 mysite.com/register
或 mysite.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,就好像我决定更改它们一样,那么我将不得不在所有地方更改它们。使用控制器操作似乎是个更好的主意,但如果您稍后重构代码,您可能 运行 会遇到同样的问题。我更喜欢使用命名路由,因为我可以给它们一个合理的名称,并且永远不会再更改它们,但仍然保持我所有的重定向正常工作。
我有两类用户:"vendors" 和 "clients"。我目前正在使用 Laravel's built-in Auth Controllers
(来自 make:auth
命令)进行客户端用户身份验证。
并且由于我有两种用户,我将 LoginController
、RegisterController
和 ResetPasswordController
上的 $redirectTo
属性 更改为 /client/home
.
证明如下:
RegisterController LoginController
现在,每次我成功注册、登录和重置密码时,它都会重定向到 /client/home
。
但问题是当我已经在 mysite.com/client/home
时,每当我尝试通过地址栏转到 mysite.com/register
或 mysite.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,就好像我决定更改它们一样,那么我将不得不在所有地方更改它们。使用控制器操作似乎是个更好的主意,但如果您稍后重构代码,您可能 运行 会遇到同样的问题。我更喜欢使用命名路由,因为我可以给它们一个合理的名称,并且永远不会再更改它们,但仍然保持我所有的重定向正常工作。