У меня есть два типа пользователей: «продавцы» и «клиенты». И в настоящее время я использую Laravel's built-in Auth Controllers
от Laravel's built-in Auth Controllers
(из команды make:auth
), чтобы выполнить аутентификацию моего клиента.
И поскольку у меня есть два типа пользователей, я изменил свойство $redirectTo
на LoginController
, RegisterController
и 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
когда пользователь, mysite.com/client/home
проверку подлинности, пытается перейти в /login
или /register
?
Самый простой вариант – создать отдельные контроллеры для обеих областей входа. После этого вам будет проще управлять, и вы можете немного улучшить поведение.
Структура папок по умолчанию выглядит так:
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'); }
Преимущество этого второго решения заключается в том, что вы можете возвращать действия контроллера и названные маршруты. Мне лично не нравится маршрутизация по URL-адресам, как будто я когда-либо решаю их изменить, тогда мне придется менять их везде. Использование действий контроллера кажется лучшей идеей, но вы можете столкнуться с той же проблемой, если позже будете реорганизовывать свой код. Я предпочитаю использовать именованные маршруты, так как я могу дать им разумное имя и никогда не менять их снова, но все же сохраняю все свои перенаправления в рабочем состоянии.