2016-09-16 96 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

是的,你会的。 –