Fosfacebookbundle faceok_login_button ({'autologoutlink': true}) no muestra "cierre de sesión" después del inicio de sesión

StackOverflow https://stackoverflow.com//questions/10703525

  •  13-12-2019
  •  | 
  •  

Pregunta

He implementado Fosuserbundle + FosfaceBookBundle y puedo registrarme y iniciar sesión con éxito como usuario regular y de Facebook.

Después de iniciar sesión como usuario de Facebook, se crean estas sesiones:

  1. fbm_xxxxxx
  2. fbsr_xxxxxxx
  3. La plantilla contiene este código:

    {{ 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>  
    

    Cuando hago clic en el botón de inicio de sesión de FB, Cumpliré el formulario, el botón de inicio de sesión FB en mis plantillas cambia a "Cerrar sesión", espero 5 segundos hasta Redirect. Después de la redirección, estoy conectado correctamente, pero el botón cambia a "Iniciar sesión" (en lugar de "cierre de sesión") nuevamente y no puedo forzar el cierre de sesión de Facebook adecuado.

    ¿Alguna idea de lo que puede ser incorrecto?

    resuelto Debe haber 'status': true en los argumentos facebook_initialize.

    Configuración seguridad.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
    

    Para el resto de los archivos, marque la documentación de los paquetes de usuarios y de Facebook.

¿Fue útil?

Solución

Debe haber 'status': true en los argumentos facebook_initialize.

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

Configuración seguridad.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

Para el resto de los archivos, marque la documentación de los paquetes de usuarios y de Facebook.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top