FOSFacebookBundle facebook_login_button({'autologoutlink': true}) не показывает выход после успешного входа

Я внедрил FOSUserBundle+FOSFacebookBundle, и я могу успешно зарегистрироваться и войти в систему как обычный пользователь, так и пользователь Facebook.

После входа в систему в качестве пользователя Facebook создаются следующие сеансы:

  1. fbm_XXXXXX
  2. fbsr_XXXXXX

Шаблон содержит этот код:

{{ facebook_initialize({'xfbml': true, 'fbAsyncInit': 'onFbInit();'}) }}
{{ facebook_login_button({'autologoutlink': true}) }}
<script>
function goLogIn(){
    window.location = "{{ path('fos_facebook_security_check') }}";
}
function onFbInit() {
    if (typeof(FB) != 'undefined' && FB != null ) {
        FB.Event.subscribe('auth.statusChange', function(response) {
            if (response.session || response.authResponse) {
                setTimeout(goLogIn, 5000);
            } else {
                window.location = "{{ path('fos_user_security_logout') }}";
            }
        });
    }
}                      
</script>  

Когда я нажимаю кнопку входа в FB, появляется всплывающее окно, я заполняю форму, кнопка входа в FB в моих шаблонах меняется на «выход», я жду 5 секунд до перенаправления. После перенаправления я правильно вошел в систему, но кнопка снова меняется на «вход» (вместо «выход»), и я не могу принудительно принудительно выйти из Facebook.

Есть идеи, что может быть не так?

РЕШЕНО Должно быть 'status': true в facebook_initialize аргументах.

КОНФИГУРАЦИЯ security.yml

services:
    my.facebook.user:
        class: Strict\UserBundle\Security\User\Provider\FacebookProvider
        arguments:
            facebook: "@fos_facebook.api"
            userManager: "@fos_user.user_manager"
            validator: "@validator"
            container: "@service_container"
    strict_user.my_provider:
        class: Strict\UserBundle\Security\User\Provider\StrictProvider
        public: false
        arguments: ["@fos_user.user_manager"]      
security:
    factories:
          - "%kernel.root_dir%/../vendor/bundles/FOS/FacebookBundle/Resources/config/security_factories.xml"

    providers:
        chain_provider:
            providers: [fos_userbundle, my_fos_facebook_provider]
        fos_userbundle:
            id: strict_user.my_provider
        my_fos_facebook_provider:
            id: my.facebook.user

    encoders:
        "FOS\UserBundle\Model\UserInterface": sha512

    firewalls:
        public:
            pattern:   ^/
            fos_facebook:
                app_url: "http://www.facebook.com/apps/application.php?id="
                server_url: "http://localhost/web/app_dev.php"
                login_path: fos_user_security_login
                check_path: fos_facebook_security_check
                default_target_path: homepage
                provider: my_fos_facebook_provider
            form_login:
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                provider: fos_userbundle
            anonymous: true           
            logout:
                path: fos_user_security_logout    
                target: homepage

Для остальных файлов проверьте документацию пакетов User и Facebook.


person Wojciech Jasiński    schedule 22.05.2012    source источник
comment
› Я внедрил FOSUserBundle+FOSFacebookBundle и могу › успешно зарегистрироваться и войти как обычный пользователь, так и пользователь Facebook. Пожалуйста, возьмите здесь, чтобы настроить этот пакет   -  person Piotr Antosik    schedule 19.06.2012
comment
Вы решили свою проблему? Мне будет интересно прочитать об этом, если это так...   -  person Quentin    schedule 12.07.2012
comment
Да, я сделал. Прочтите отредактированный мной пост: РЕШЕНО В аргументах facebook_initialize должен быть «статус»: true.   -  person Wojciech Jasiński    schedule 12.07.2012
comment
Вы должны сделать свое решение ответом и принять его.   -  person dan-klasson    schedule 01.11.2012
comment
@dan-klasson спасибо, я добавил ответ.   -  person Wojciech Jasiński    schedule 01.11.2012


Ответы (1)


В facebook_initialize аргументах должно быть 'status': true.

{{ facebook_initialize({'xfbml': true, 'fbAsyncInit': 'onFbInit();', 'status': true }) }}

КОНФИГУРАЦИЯ security.yml

services:
    my.facebook.user:
        class: Strict\UserBundle\Security\User\Provider\FacebookProvider
        arguments:
            facebook: "@fos_facebook.api"
            userManager: "@fos_user.user_manager"
            validator: "@validator"
            container: "@service_container"
    strict_user.my_provider:
        class: Strict\UserBundle\Security\User\Provider\StrictProvider
        public: false
        arguments: ["@fos_user.user_manager"]      
security:
    factories:
          - "%kernel.root_dir%/../vendor/bundles/FOS/FacebookBundle/Resources/config/security_factories.xml"

    providers:
        chain_provider:
            providers: [fos_userbundle, my_fos_facebook_provider]
        fos_userbundle:
            id: strict_user.my_provider
        my_fos_facebook_provider:
            id: my.facebook.user

    encoders:
        "FOS\UserBundle\Model\UserInterface": sha512

    firewalls:
        public:
            pattern:   ^/
            fos_facebook:
                app_url: "http://www.facebook.com/apps/application.php?id="
                server_url: "http://localhost/web/app_dev.php"
                login_path: fos_user_security_login
                check_path: fos_facebook_security_check
                default_target_path: homepage
                provider: my_fos_facebook_provider
            form_login:
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                provider: fos_userbundle
            anonymous: true           
            logout:
                path: fos_user_security_logout    
                target: homepage

Для остальных файлов проверьте документацию пакетов User и Facebook.

person Wojciech Jasiński    schedule 01.11.2012