使用 HWIOAuthBundle 登录 Facebook 后,语言环境回退到默认值

Locale fallbacks to the default value after Facebook login using HWIOAuthBundle

我有一个问题,当我在我的网站上切换语言并使用 HWIOAuthBundle 进行 Facebook 登录时,我总是会重定向到默认语言环境,我在 [=13] =]. (在我的例子中:"en")

routing.yml

# Facebook Connect 
hwi_oauth_security:
    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
    prefix:   /{_locale}/login
    defaults: { _locale: en }
    requirements:
        _locale: en|de

hwi_oauth_connect:
    resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
    prefix:   /{_locale}/login
    defaults: { _locale: en }
    requirements:
        _locale: en|de

hwi_oauth_redirect:
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
    prefix:   /{_locale}/login
    defaults: { _locale: en }
    requirements:
        _locale: en|de

facebook_login:
    path: /{_locale}/login/check-facebook
    defaults: { _locale: en }
requirements:
    _locale: en|de

# Site Routing #
homepage:
    path:     /{_locale}
    defaults: { _controller: MyPageBundle:Homepage:index, _locale: en }
    requirements:
        _locale: en|de

security.xml

中的 oauth 防火墙设置
 firewalls:
        main:
            oauth:
                resource_owners:
                    facebook: "/%locale%/login/check-facebook"
                login_path: fos_user_security_login
                failure_path: fos_user_security_login
                oauth_user_provider:
                    service: hwi_oauth_user_provider
                always_use_default_target_path: true
                default_target_path: "/%locale%"

之后,当我打开 mysite.com/en/login/facebook 时,我使用我的 Facebook 帐户成功登录并重定向到以下 link:mysite.com/en#_=_

但是当我打开 mysite.com/de/login/facebook 时,我会重定向到与前一个案例相同的 url。似乎在重定向和回退到默认语言环境后语言环境没有通过。

在其他所有情况下,语言环境都可以正常工作。例如,我正在使用 FOSUserBundle,在登录、注销或注册后,我每次都会使用正确的语言环境进行重定向。

有人可以帮我解决这个问题吗?提前致谢!

好的,我找到了问题的根源。我在 facebook resource_owners 中使用了 %locale% 变量,它与 _locale 变量不同,但它是 parameters.yml 中的 locale 变量。所以我通过以下修改解决了我的问题:

之后我收到一条 No resource owner with name 'check-facebook' 错误消息,但我通过从 facebook-login 路由中删除所有 _locale 相关内容来解决它:

facebook_login:
    path: /login/check-facebook

希望对其他人也有帮助:)