-1

FOSUserBundle と FOSUserFacebookBundle を使用してユーザーを認証しています。問題は、/login ページにアクセスしたときです。ユーザー名とパスワードを含む 2 つのテキスト フィールドがあります。ユーザー名とパスワードを入力すると、次のエラーが表示されます。

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 に答える