Laravel 5.3 Пользовательский путь для перенаправления после аутентификации

У меня есть два типа пользователей: «продавцы» и «клиенты». И в настоящее время я использую Laravel's built-in Auth Controllers (из команды make:auth) для аутентификации пользователя моего клиента.

И поскольку у меня есть два типа пользователей, я изменил свойство $redirectTo для LoginController, RegisterController и ResetPasswordController на /client/home.

Вот доказательство:

Регистрконтроллер Контроллер входа

Теперь он перенаправляется на /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?


person Ronneil Petterson    schedule 16.09.2016    source источник


Ответы (1)


Самый простой вариант — создать отдельные контроллеры для обеих областей входа. Позже будет проще управлять, и вы сможете немного лучше настроить поведение.

Структура папок по умолчанию выглядит так:

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 свойства каждого контроллера.

В качестве альтернативного решения вы можете перезаписать redirectPath признака RedirectsUsers, создав метод redirectPath в своих соответствующих контроллерах и вернув URL-адрес, который вы хотите:

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

    return url('home');
}

Преимущество этого второго решения заключается в том, что вы также можете возвращать действия контроллера и именованные маршруты. Мне лично не нравится роутинг на урлы, так как если я когда-нибудь решу их изменить, то мне придется менять их везде. Использование действий контроллера кажется лучшей идеей, но вы можете столкнуться с той же проблемой, если позже проведете рефакторинг своего кода. Я предпочитаю использовать именованные маршруты, так как я могу дать им осмысленное имя и больше никогда не менять их, но при этом поддерживать все мои перенаправления в рабочем состоянии.

person Tibor B.    schedule 16.09.2016
comment
Итак, если бы я создал папку «Клиенты» для контроллеров аутентификации, специфичных для клиентов, и направил бы к ним свои маршруты, мне просто нужно было бы установить для их индивидуального свойства redirectTo значение «клиент/дом», и я бы уже получил желаемый результат? - person Ronneil Petterson; 16.09.2016
comment
Да, вы бы. - person Tibor B.; 17.09.2016