Перенаправление Laravel при входе в систему

#php #laravel

#php #laravel

Вопрос:

Основная информация :

Использование Laravel 7.29.3

Для всех моих маршрутов требуется язык, основанный на выбранном пользователем языке. Допустимый URL-адрес выглядит следующим образом www.test.com/en/home например

Ситуация :

Пользователь открыл мой веб-сайт на двух вкладках: Tab1 и Tab2. Один и тот же веб-сайт на обеих вкладках.

Он входит в систему с помощью Tab1 и проходит проверку подлинности. Затем он нажимает кнопку входа в Tab2. Laravel понимает, что пользователь уже прошел проверку подлинности, и перенаправляет пользователя на www.test.com/home .

Проблема в том, что www.test.com/home в нем нет никакой локали, и он недействителен. Пользователь получает ошибку 404.

В Laravel LoginController есть переменная

  protected $redirectTo = RouteServiceProvider::HOME;
 

Но как мне получить там текущую языковую локаль? Я знаю функцию
app()-> getLocale(), но когда я пытаюсь

 protected $redirectTo = app()->getLocale() . RouteServiceProvider::HOME;
 

Я получаю сообщение об ошибке

 Constant expression contains invalid operations 
 

Я уже добавил следующую функцию в свой LoginController, но Laravel игнорирует ее в вышеупомянутой ситуации с двумя вкладками.

 protected function redirectTo()
{

return app()->getLocale() . '/home';

}
 

Итак, как я могу получить текущую выбранную локаль / язык в redirectTo?

  protected $redirectTo = RouteServiceProvider::HOME;
 

Заранее спасибо

Ответ №1:

Это мой первый ответ, поэтому извините, если это вам не поможет, но я думаю, что в laravel 7 у вас есть метод, расположенный в AuthenticatesUsers, который называется authenticated() это может помочь вам выполнить желаемое действие после входа пользователя в систему или просто создать метод redirectPath() в вашем контроллере для переопределенияэто из RedirectsUsers, если функция redirectTo() не запущена.

Комментарии:

1. Спасибо за быстрый ответ. Я добавил следующие функции в свой LoginController, но все равно получаю сообщение об ошибке public function authenticated() { return redirect(route(‘home’, app()->getLocale())); } общедоступная функция redirectPath(){ return redirect(route(‘home’, app()->getLocale())); }

2. Попробуйте это и удалите общедоступную функцию authenticated() redirectPath() { return app()-> getLocale() . ‘/home’; }. Я только что попробовал функцию на моем logincontroller и перенаправляет пользователя на www.example.com/en/home . Функция redirectPath() должна возвращать желаемый URL. Если вы проверите свой sendLoginResponse(), вы увидите, что он уже вызван redirect() , вам не нужно вызывать его снова.

3. ‘code’ общедоступная функция redirectPath() { return app()->getLocale() . ‘/home’; } ‘код’

4. Я нашел проблему. Мне пришлось отредактировать промежуточное программное обеспечение RedirectIfAuthenticated.php . Я заменил строку return redirect(RouteServiceProvider::HOME); на return redirect(route(‘home’, app()-> getLocale())); Теперь это работает.

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