使用HWIOAuthBundle登录Facebook后,区域设置回退到默认值


Locale fallbacks to the default value after Facebook login using HWIOAuthBundle

我有一个问题,当我在我的网站上切换语言时,我使用HWIOAuthBundle做一个Facebook登录,我总是重定向到默认的语言环境,我在config.yml中设置的。(在我的例子中:"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

oauth firewall Settings in security.xml

 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帐户,并重定向到以下链接:mysite.com/en#_=_

但是当我打开mysite.com/de/login/facebook时,我得到重定向到相同的url,就像前面的情况一样。在重定向和回退到默认区域设置之后,似乎没有传递区域设置。

在所有其他情况下,区域设置工作良好。例如,我使用FOSUserBundle,登录,注销或注册后,我每次都获得正确的语言环境重定向。

有人能帮我解决这个问题吗?提前感谢!

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

  • 我把我的Locale设置为"sticky"。
  • 我将facebook resource_owners路由的值修改为facebook-login路由。

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

facebook_login:
    path: /login/check-facebook

我希望这对其他人也有帮助。