net example es_la en_us con async javascript facebook facebook-javascript-sdk

javascript - example - Facebook JS SDK FB.logout() no finaliza la sesión del usuario



login con facebook javascript (10)

Estoy intentando cerrar la sesión de un usuario fuera de Facebook con el SDK de JS de Facebook; sin embargo, estoy llamando:

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

devuelve: 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 qué podría estar causando este comportamiento? Este código funcionó anteriormente en mi aplicación y recientemente comenzó a comportarse de esta manera.

Otro ejemplo usando FireBug:



Como pasé mucho tiempo para averiguar exactamente qué está sucediendo en el cierre de sesión de FB, me sentí mejor compartiéndolo aquí para otros.

Lo primero, por favor lea la documentación here

Una persona inicia sesión en Facebook y luego inicia sesión en su aplicación. Al cerrar sesión en su aplicación, la persona todavía está conectada a Facebook.

Este punto mató al 90% de mi tiempo. Cuando inicié sesión en facebook.com y traté de probar el botón de inicio de sesión en mi aplicación, funcionó como se esperaba, pero el cierre de sesión no terminó la sesión.

Solución o solución: De acuerdo con los escenarios dados en el documento, no terminará la sesión del usuario, ya que el inicio de sesión no se inicia desde la aplicación, es desde facebook.com. así que en este caso, fb no terminará la sesión.

Cuando inicia sesión en fb, desde su aplicación (nuevo inicio de sesión como nombre de usuario y contraseña), el sistema considera la fuente / activador de la sesión como su aplicación. por lo tanto, cuando cierre la sesión (window.FB.logout o FB.logout) terminará la sesión del usuario completamente.

Entonces, cierre la sesión de facebook.com antes de probar la funcionalidad de inicio de sesión en su aplicación.

Como se mencionó anteriormente, use el siguiente código para cerrar sesión

FB.logout(function(response) { // response from logout will have authResponse with access_token so better to test the status as it will return "unknown" if(response.status !== "connected") { } // do some check on the status of the login before considering successful logout. });

Por último, pero no menos importante: para realizar pruebas desde localhost, actualice la configuración en FB APP

  1. Actualizar los dominios de la aplicación a localhost
  2. URL del sitio en sitios web a http://localhost:3000/

Esto resolverá los problemas enfrentados en las pruebas de localhost


Me he enfrentado a un problema similar. He usado FB.getLoginStatus() después de FB.getLoginStatus() sesión.


Ok chicos he encontrado una solución para esto:

Coloque el evento onClick para la etiqueta de cierre de sesión <a> como esta

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>


Puede que no funcione porque no incluye la clave de la aplicación de Facebook. Funciona para mí así:

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** } }); });


Tengo la misma experiencia con el FB.Logout() no funciona como se anuncia. Como solución alternativa, uso la siguiente función de javascript para verificar si el usuario ha iniciado sesión y, de ser así, redirige a https://www.facebook.com/logout.php con la URL de la página siguiente para cargar 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 bit de mostrar / ocultar es solo jQuery para mostrar u ocultar divs que tienen un botón de inicio y cierre de sesión. El botón de cierre de sesión onclick activa la función reallyLogout ().

Esto funciona para mi aplicación.


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

Cuando cierra la sesión, se envía una solicitud de dominio cruzado a Facebook para invalidar la sesión. Cuando presiona Reload, se envía otra solicitud al sitio de Facebook, ya que FB reconoce que la cookie no es válida y la elimina correctamente de su navegador.

Sospecho que es un error de expresión regular en cómo se olvidó de analizar la cookie fbm_, recientemente introducida en el último día o así. Estoy sorprendido de que esta solución no haya sido empujada.


en la aplicación mvc de asp.net lo hice como sigue.

<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")''; });



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

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

Por favor intente llamarlo desde el servidor.