2012-01-11 34 views
15

Estoy intentando registrar un usuario de Facebook con el SDK de Facebook JS, sin embargo llamar:Facebook JS SDK FB.logout() no termina la sesión del usuario

FB.logout(function(response){ 
    console.log(response); 
}); 

rendimientos: Response.Status == "conectado"

Y solo después de actualizar la página, el SDK se da cuenta de que la sesión ha finalizado. Alguien sabe lo que podría estar causando este comportamiento? Este código trabajó previamente en mi aplicación y recientemente comenzó a comportarse de esta manera.

Otro ejemplo usando FireBug:

enter image description here

+0

Cuando llamas al cierre de sesión y antes de actualizar tu página, si vas a Facebook ¿sigues conectado? Si llama al cierre de sesión dos veces seguidas, ¿es la misma respuesta? (si no es solo una cuestión de tiempo entre las llamadas y la respuesta?) (Y, incluso si no está respondiendo la parte "por qué", ¿no puedes arreglar esto volviendo a cargar la página en la respuesta?) Oh y, el último, "indefinido" es otro console.log supongo? –

+0

@Flow 'S, sí' undefined 'es un registro de consola irrelevante. FB.logout() desconecta al usuario de Facebook, pero el objeto FB de la página actual no se da cuenta hasta después de una actualización. Preferiría no tener que actualizar manualmente la página después de que el usuario cierre la sesión. También intenté eliminar la cookie fbsr_ para ver si esto la eliminaba, sin efecto. Esto funcionó previamente y solo recientemente cambió. Además, probé la misma prueba en hulu.com que usa el FB JS SDK, los mismos resultados. ¿Es esto posiblemente un error en el SDK? –

+0

Actualmente uso 'FB.getLoginStatus' de' FB.logout' callback para asegurar que JS-SDK se olvide del usuario. –

Respuesta

13

https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a96454690 Este es un error en el SDK de JS que ahora se ha solucionado y que no debería ser presionado demasiado tiempo.
Hasta entonces puedes hacer lo siguiente

FB.logout(function(response) { 
    FB.Auth.setAuthResponse(null, 'unknown'); 
    ... 
}); 
+0

¡Gracias, esto funcionó para mí! – Mark

+0

Gracias trabajó conmigo y resolver mi gran problema, aprecio :) –

+0

Lo probé, pero, la función (respuesta) nunca se ejecutó, ¿alguna idea? – simo

1

que tienen la misma experiencia con el FB.Logout() no funciona como se anuncia. Como solución utilizo el siguiente función javascript para comprobar si el usuario está conectado y si es así, redirigir a https://www.facebook.com/logout.php con la URL de la página posterior a la carga y su token de acceso:

function reallylogout() { 
     FB.getLoginStatus(function (response) { 
     if (response.authResponse) { 
      window.location = "https://www.facebook.com/logout.php?next=" + 
      'URL to redirect to' + 
      "&access_token=" + response.authResponse.accessToken; 
     } else { 
      $("#loginButtonDiv").show(); 
      $("#logoutButtonDiv").hide(); 
     } 
     }); 
    } 

El mostrar/ocultar bits es solo jQuery mostrar u ocultar los divs que tienen un botón de inicio de sesión y de cierre de sesión. El botón de cierre de sesión onclick activa la función reallyLogout().

Esto funciona para mi aplicación.

+0

Esto funciona, pero realmente estoy buscando una solución que pueda desencadenar que el SDK de FB JS se 'olvide' del usuario que inició sesión sin realizar una actualización de página. Hasta hace unas semanas, esto funcionó, y no he hecho ningún cambio desde entonces. –

3

Ver http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html

Al cerrar la sesión, una solicitud entre dominios es enviado a Facebook para invalidar la sesión. Cuando presionas recargar, se envía otra solicitud al sitio de Facebook, ya que FB reconoce que la cookie no es válida, elimina correctamente la cookie de tu navegador.

Sospecho que es un error regexp en cómo se olvidaron de analizar la cookie fbm_, recientemente presentada en el último día más o menos. Estoy sorprendido de que esta solución no haya sido presionada.

1

He enfrentado el mismo tipo de problema. He usado FB.getLoginStatus() después de cerrar la sesión.

-1

Puede que no funcione porque no incluye la clave de su aplicación de Facebook. A mí me funciona de esta manera:

Ext.get('auth-logoutlink').on('click', function(){ 
        FB.getLoginStatus(function (response) { 
        if (response.authResponse) { 
         window.location = "https://www.facebook.com/logout.php?confirm=1&api_key=**MYAPIKEY**&next=" + 
         '**MYWEBSITEURL**' + 
         "&access_token=" + response.authResponse.accessToken; 
        } else { 
         //HIDE **LOGOUT BUTTON** 
         //SHOW **LOGIN BUTTON** 
        } 
        }); 
     }); 
0

Ok chicos que encontraron una solución para esto:

aguantar evento de clic de la etiqueta de cierre de sesión <a> como esto

onclick="FB.logout(function() { document.location.reload(); });" 

Todos juntos:

<a href="#" 
    id="auth-logoutlink" 
    style="float:left;font-size: small;" 
    onclick="FB.logout(function() { document.location.reload(); });"> 
    [logout] 
</a> 
0

en la aplicación asp.net mvc lo hice de la siguiente manera.


<a href="javascript:void(0);" class="logOff">Log out</a> 

$(function() { 


    $(".logOff").click(function() { 

     //check if logout is 
     FB.getLoginStatus(function (response) { 
      console.log('inside login status'); 
      if (response.status === 'connected') { 
       // the user is logged in and has authenticated your 
       // app, and response.authResponse supplies 
       // the user's ID, a valid access token, a signed 
       // request, and the time the access token 
       // and signed request each expire 
       var uid = response.authResponse.userID; 
       var accessToken = response.authResponse.accessToken; 
       FB.logout(function (response) { 

        FB.Auth.setAuthResponse(null, 'unknown'); 

       }); 
      } else if (response.status === 'not_authorized') { 
       // the user is logged in to Facebook, 
       // but has not authenticated your app 

      } else { 
       // the user isn't logged in to Facebook. 
       console.log('response status not logged in'); 
      } 
     }); 
     window.location.href = '@Url.Action("LogOff", "Account")'; 

    }); 
+0

'FB.Auth', Auth no existe para mí con Facebook SDK 2.5. – manonthemoon

2
FB.logout(function(response) { 
    ... 
}); 

Este método FB.logout está trabajando 100%. El problema es que los usuarios intentan llamarlo desde localhost que no funciona.

Por favor intente llamar desde el servidor.

+0

En mi caso, sí, tienes razón. No funciona en localhost. Sin embargo, no estoy seguro de su palabra (trabajando al 100%). –

Cuestiones relacionadas