如何配置本地化为auth(登录/注销)Laravel?

时间:2016-06-24 09:33:51

标签: laravel authentication laravel-5.2

我使用route :: auth()来验证用户登录/注销。但是,当我通过这篇文章https://laracasts.com/discuss/channels/tips/example-on-how-to-use-multiple-locales-in-your-laravel-5-website

写下本地化时

我没有正确的方法,它会重定向到' /'当我在AuthController中使用$ redirectPath注销时。 我可以将它配置为' / en'但它硬编码。我希望它重定向到当前的区域设置(在登录/注销之前)。 例: 当前路径是:localhost:8888 / fr / user,然后注销后是localhost:8888 / fr / login,如你所见,它是自动的,而不是我可以配置的硬代码。

谢谢,

6 个答案:

答案 0 :(得分:1)

你可以做一个解决方法。将$redirectPath设置为'登录' ,然后从那里重定向到当前区域设置:

在您的控制器中:

$redirectPath = '/login';

routes.php

Route::get('/login', function () {
    return redirect('/' . App::getLocale(). '/login');
});

答案 1 :(得分:0)

我找到了问题的答案。

我在用户表名称'lang'中添加了一列,并设置了fallback_locale =>成 'en';

登录成功后,我加载此列并将其设置为fallback_locale,如果用户没有lang(== null),则locale将成为fallback_locale。

如果有任何问题,您可以通过电子邮件viethuong2072000@gmail.com与我联系

答案 2 :(得分:0)

我已经搜索了一段时间,终于找到了答案。

大多数描述如何配置用于设置应用程序语言环境的中间件的文章都没有提到重要的部分。也就是说,在登录注销注册重置密码验证电子邮件< / strong>路线。所有这些都将回退到 fallback_locale

许多人找到了解决此问题的方法,方法是在会话中保存区域设置并在不同的Middlerwares,Controllers等中访问此变量。但是,解决方法也不错,我相信像这样的直观框架Laravel必须有更好的方法,所以我一直在搜索...

这是答案:

您可能想为每个路由添加一个重定向规则,因此在调用该路由时,它将应用为其余应用程序设置的语言环境。 (Multi-Language Routes and Locales with Auth

解决方案是向他们添加重定向方法:

  • App \ Http \ Controllers \ Auth \ LoginController.php
  • App \ Http \ Controllers \ Auth \ RegisterController.php
  • App \ Http \ Controllers \ Auth \ ResetPasswordController.php
  • App \ Http \ Controllers \ Auth \ VerificationController.php

将重定向方法添加到以下每个方法中:

public function redirectTo()
{
    return app()->getLocale() . '/home';
}

除了一项工作外,几乎所有工作都是注销。该路由也由LoginController处理,但是,我们的重定向规则不适用于该路由。您可能需要覆盖logout()方法。 (How to set laravel 5.3 logout redirect path?

App\Http\Controller\Auth\LoginController.php

// use AuthenticatesUsers;
use AuthenticatesUsers {
    logout as performLogout;
}

protected $redirectTo = '/home';

public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function redirectTo()
{
    return app()->getLocale() . '/home'; // works for login
}

public function logout(Request $request)
{
    $this->performLogout($request); // call the original code
    return redirect(app()->getLocale() . '/home'); // add the Locale fix for logout
}

我正在使用Laravel 6,但针对较早版本讨论了解决方案

答案 3 :(得分:0)

我将此软件包用于本地化-https://github.com/mcamara/laravel-localization 。 将Route::auth();放在前缀本地化

Route::group(['prefix' => LaravelLocalization::setLocale() , 'middleware' => 
['localeSessionRedirect', 'localizationRedirect', 'localeViewPath']], function () {
  Route::auth();
});

它将起作用。

答案 4 :(得分:0)

Laravel 8 的更新: 这个本地化问题仍然没有任何地方抱怨,所以这里有一个解决本地化登录、注销和注册的解决方案:

return redirect()->intended(route('home',app()->getLocale()));

其他人也一样!

答案 5 :(得分:-1)

假设您的当前语言环境在config / app.php中设置。

您可以使用config('app.locale');从配置中获取您的语言环境。

然后,您可以在redirect()中使用该值,或者将$redirectPath值设置为运行时的值。