-1

我正在使用 FOSUserBundle 和 FOSUserFacebookBundle 对我的用户进行身份验证。问题是当我访问我的 /login 页面时。我有两个带有用户名和密码的文本字段。当我输入我的用户名和密码时,我收到以下错误:

The Facebook user could not be retrieved from the session.

这是一个非常奇怪的错误,因为我通过表单而不是通过 facebook 登录用户,但就好像我通过 facebook 登录用户一样。所以我玩弄了我的源代码,这是我的 security.yml/firewall 设置:

 firewalls:
            main:
                pattern: ^/.*
                form_login:
                    login_path: /login
                    check_path: /login_check     
                    provider: fos_userbundle
                fos_facebook:
                    app_url: "http://apps.facebook.com/myapp/"
                    server_url: "http://localhost/Symfony/web/app_dev.php"
                    login_path: /login
                    check_path: /login_check
                    default_target_path: /
                    provider: my_fos_facebook_provider
                anonymous: true
                logout: 
                    path:   /logout
                    target: / 
                    handlers: ["fos_facebook.logout_handler"]
                #http_basic:
                #    realm: "Secured Demo Area"
            login:
                pattern:  ^/login$
                security: false

我担心的是 /login_check 会一直检查 facebook 会话是否存在,我真的不想要。当我更改 fos_facebook 的 login_path 和 check_path 时,一切正常。知道可能导致此问题的原因以及如何解决此问题吗?

4

2 回答 2

0

对于 form_login 和 fos_facebook,您的 check_path 应该不同。例如:

           form_login:
                login_path: /login
                check_path: /login_check     
                provider: fos_userbundle
            fos_facebook:
                app_url: "http://apps.facebook.com/myapp/"
                server_url: "http://localhost/Symfony/web/app_dev.php"
                login_path: /login
                check_path: /login_check/facebook
                default_target_path: /
                provider: my_fos_facebook_provider
于 2012-09-16T06:38:42.527 回答
0

我遇到了同样的问题,卡洛斯是对的。

需要进行以下更改:

 form_login:
    login_path: /login
    check_path: /login_check     
    provider: fos_userbundle
 fos_facebook:
    app_url: "http://apps.facebook.com/myapp/"
    server_url: "http://localhost/Symfony/web/app_dev.php"
    login_path: /login
    check_path: /login_check/facebook
    default_target_path: /
    provider: my_fos_facebook_provider

在你的 routing.yml

_security_check:
  path:  /login_check
  defaults:  { _controller: FOSUserBundle:Security:check }

_security_logout:
  pattern:  /logout

_security_check_fb:
  path: /login_check/facebook
  defaults:  { _controller: FOSUserBundle:Security:check }

最后但并非最不重要的一点是,您必须为 Facebook 编辑 JS:

function goLogIn(){
  window.location.href = "{{ path('_security_check_fb') }}";
}

所以现在您可以毫无问题地使用表单或 Facebook 登录。

于 2013-09-27T07:50:27.443 回答