without español called facebook oauth logout

facebook - español - fb.logout() called without an access token.



Facebook Oauth Logout (13)

Para desarrolladores de Python que desean iniciar sesión en el usuario directamente desde el servidor

En este momento estoy escribiendo esto, el truco con m.facebook.com ya no funciona (al menos para mí) y el usuario es redirigido a la página de inicio de sesión de FB móvil, lo que obviamente no es bueno para UX.

Afortunadamente, FB PHP SDK tiene una solución semi documentada (en caso de que el enlace no conduzca a la función getLogoutUrl() , solo getLogoutUrl() en esa página). Esto también se menciona en al menos otro problema de StackOverflow: Facebook php SDK getLogoutUrl () .

Por cierto, acabo de notar que Zach Greenberg acertó en esta pregunta, pero estoy agregando mi respuesta como un resumen para los desarrolladores de Python.

Tengo una aplicación que se integra con Facebook usando Oauth 2.

Puedo autorizar con FB y consultar sus API REST y Graph perfectamente, pero cuando autorizo ​​una sesión activa del navegador se crea con FB. Luego puedo desconectarme de mi aplicación, pero la sesión con FB persiste, por lo que si alguien más usa el navegador, verá la cuenta FB de los usuarios anteriores (a menos que el usuario anterior también se desconecte manualmente de FB).

Los pasos que tomo para autorizar son:

  1. Llamar a [LINK: graph.facebook.com/oauth/authorize?client_id ...]

Este paso abre una ventana de inicio de sesión / conexión de Facebook si el navegador del usuario aún no tiene una sesión de FB activa. Una vez que inicien sesión en Facebook, redirigen a mi sitio con un código que puedo intercambiar por un token oauth.

  1. Llame a [LINK: graph.facebook.com/oauth/access_token?client_id ..] con el código de (1)

Ahora tengo un Token Oauth, y el navegador del usuario está conectado a mi sitio, y en FB.

  1. Llamo a un grupo de API para hacer cosas: es decir, [LINK: graph.facebook.com/me?access_token= ..]

Supongamos que mi usuario quiere cerrar sesión en mi sitio. Los términos y condiciones de FB exigen que ejecute Single Sign Off, de modo que cuando el usuario cierra la sesión de mi sitio, también se desconecta de Facebook. Hay argumentos de que esto es un poco tonto, pero me complace cumplir si hay alguna manera de lograrlo.

He visto sugerencias de que:

R. Uso Javascript API para cerrar la sesión: FB.Connect.logout (). Bueno, traté de usar eso, pero no funcionó, y no estoy seguro de cómo podría hacerlo, ya que no uso JavaScript API de ninguna manera en mi sitio. La sesión no es mantenida ni creada por la API de Javascript, por lo que no estoy seguro de cómo se supone que debe caducar.

B. Utilice [LINK: facebook.com/logout.php]. Esto fue sugerido por un administrador en los foros de Facebook hace algún tiempo. El ejemplo dado se relaciona con la forma antigua de obtener sesiones de FB (no-oauth), así que no creo que pueda aplicarlo en mi caso.

C. Use el antiguo REST api expireSession o revokeAuthorization. Intenté estos dos y, aunque expiran el token de Oauth, no invalidan la sesión que el navegador está usando actualmente, por lo que no tiene ningún efecto, el usuario no ha cerrado sesión en Facebook.

Realmente estoy un poco suelto, la documentación de Facebook es desigual, ambigua y bastante pobre. El soporte en los foros es inexistente, en este momento ni siquiera puedo iniciar sesión en el foro de Facebook, y aparte de eso, su propia integración con FB Connect ni siquiera funciona en el foro en sí. No inspira mucha confianza.

Ta por cualquier ayuda que puedas ofrecer. Derek

PD. Tuvo que cambiar HTTPS a LINK, no hay suficiente karma para publicar enlaces, lo cual es bastante justo.


@Christoph: solo añadiendo algo. No creo que esta sea una forma correcta de cerrar sesión en ambos lugares al mismo tiempo. ( <a href="/logout" onclick="FB.logout();">Logout</a> ).

Just add id to the anchor tag . <a id=''fbLogOut'' href="/logout" onclick="FB.logout();">Logout</a> $(document).ready(function(){ $(''#fbLogOut'').click(function(e){ e.preventDefault(); FB.logout(function(response) { // user is now logged out var url = $(this).attr(''href''); window.location= url; }); });});


Aquí hay una alternativa a la respuesta aceptada que funciona en la versión actual (2.12) de la API.

<a href="#" onclick="logoutFromFacebookAndRedirect(''/logout'')">Logout</a> <script> FB.init({ appId: ''{your-app-id}'', cookie: true, xfbml: true, version: ''v2.12'' }); function logoutFromFacebookAndRedirect(redirectUrl) { FB.getLoginStatus(function (response) { if (response.status == ''connected'') FB.logout(function (response) { window.location.href = redirectUrl; }); else window.location.href = redirectUrl; }); } </script>


Con PHP estoy haciendo:

<a href="?action=logout">logout.</a> if(isset($_GET[''action'']) && $_GET[''action''] === ''logout''){ $facebook->destroySession(); header(WHERE YOU WANT TO REDIRECT TO); exit(); }

Funciona y es agradable y fácil, ahora estoy tratando de encontrar un gráfico de botón de desconexión.



Estoy teniendo el mismo problema. También inicio sesión usando oauth (estoy usando RubyOnRails), pero para desconectarme, lo hago con JavaScript usando un enlace como este:

<a href="/logout" onclick="FB.logout();">Logout</a>

Esto primero llama a la función onclick y realiza un cierre de sesión en Facebook, y luego se llama a la función normal /logout de /logout de mi sitio.

Aunque también preferiría una solución de servidor, pero al menos hace lo que quiero, me conecta a ambos sitios.

También soy bastante nuevo en el tema de integración de Facebook y jugué la primera vez con él, pero mi sensación general es que la documentación está bastante diseminada por todo el lugar con muchas cosas desactualizadas.


Puedes hacer esto con access_token :

$access_array = split("/|", $access_token); $session_key = $access_array[1];

Puede usar esa $session key en el PHP SDK para generar una URL de cierre de sesión funcional.

$logoutUrl = $facebook->getLogoutUrl(array(''next'' => $logoutUrl, ''session_key'' => $session_key));

Esto finaliza la sesión de Facebook del navegador.



Una nota para la respuesta de Christoph: Facebook Oauth Logout La función de cierre de sesión requiere que se especifique una función de devolución de llamada y fallará sin ella, al menos en Firefox. Chrome funciona sin la devolución de llamada.

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


es simple simplemente escriba: $ facebook-> setSession (null); para desconectarse


la solución móvil sugerida por Sumit funciona perfectamente para AS3 Air:

html.location = "http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com"


Update: esta solución funciona y solo una llamada a ''FB.logout ()'' no funciona porque el navegador quiere que la interacción del usuario llame a esta función, para que sepa que no es un script.

<a href="#" onclick="FB.logout();">Logout</a>


Esta solución ya no funciona con la API actual de FaceBook (parece que fue involuntaria para empezar)

http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com;

Intente proporcionar este enlace en su enlace de suscripción o en el botón donde "yoursitename.com" es donde desea redirigir de nuevo después de que el inicio de sesión sea su página de inicio.

Funciona..