2012-02-08 33 views
6

¿Cómo hago un cierre de sesión usando Facebook api log me de mi aplicación (un sitio web), pero mantenme conectado a facebook.com?Facebook API Cierre de sesión de mi aplicación pero no de Facebook

Esto me abre una sesión bien:

window.fbAsyncInit = function() 
{ 
     FB.init({ 
      appId  : '<?= APP_ID ?>', 
      status  : true, 
      cookie  : true, 
      xfbml  : true, 
      oauth  : true, 
     }); 

    FB.Event.subscribe('auth.login', function(response) 
    {alert(response); 
      window.location = 'http://reviewsie.com/accounts/facebook'; 
     }); 

    }; 

    (function(d) 
{ 
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 

Pero luego haga clic en Salir en mi sitio, que mato a mi sesión de mi aplicación. Luego, cuando haces clic en el botón fb: login, se abre y cierra y no hace nada porque todavía estoy conectado a Facebook. Quiero que redirija.

Pero si cuando cierro la sesión también uso Facebook :: logoutUrl me desconecta de mi aplicación Y Facebook, que no es lo que quiero.

+0

Por favor, pegue el código. ¿Qué has intentado? –

+0

publicó mi código, y sí estoy atascado en este – cdub

+0

unset ($ _ SESSION ['fb_APPID_user_id']); –

Respuesta

3

¿Estás seguro de que deseas solo desconectar tu aplicación, y no fb también, si has iniciado sesión usando fb? ¿Qué tipo de aplicación podría querer hacer algo así? ¿Y por qué? ¿Cuál es el beneficio de hacerlo?


Pero si realmente quiere (truco), en index.php:

<?php 
require 'init.php'; // general init 
require 'init_fb.php'; // sets $fb_id if logged in to fb 

if (isset($fb_id) and !isset($_SESSION['do_not_auto_login'])) { 
    echo "<a href='/logout'>Logout</button>"; 
    include 'app.php'; 
    return; 
} 

if (isset($_SESSION['do_not_auto_login']) 
    echo "<a href='/re_login'>FB Login</button>"; 
else include 'html_and_js_fb_login_code_and_button.php'; 

include 'startpage.php'; 
?> 

y en logout.php:

$_SESSION['do_not_auto_login'] = true; 
// destroy-code 

y en re_login.php:

unset($_SESSION['do_not_auto_login']); 
header("location: /"); // re-direct back to index.php 

No es perfecto, pero funciona bastante bien. Espero que tengas el truco!


Pero aún así, ¿por qué? Si no cree que su usuario desea volver, pregunte "¿Cómo puedo eliminar mi aplicación fb del usuario?" o algo en su lugar o prueba la respuesta de @ DMCS ... ¿Por qué?

1

Es necesario utilizar destroySession de Facebook para hacer

www.example.com?act=logout

<?php 
php sdk blah blah 


if($_GET['act'] =='logout'){ 
    $facebook->destroySession(); 

} 
$params = array(
'scope' => 'read_stream, friends_likes', 
'redirect_uri' => 'https://www.myapp.com/post_login_page' 
); 

$loginUrl = $facebook->getLoginUrl($params); 

?> 

Tal vez usted necesita para establecer parámetro para que sea redirigir.

+0

aún no funciona: o ( – cdub

+0

cuando cierra la sesión desde su sitio, no desea iniciar sesión en Facebook. cuando hace clic en iniciar sesión, ¿desea redirigir a páginas específicas? ¿Esto es lo que quiere? – Leon

+0

si desea cierre de sesión de sus sitios oni.solo use $ facebook-> destroySession(); , no use getLogoutURL. – Leon

0

Cuando el usuario inicia sesión en su aplicación, envíe una llamada HTTP DELETE al /me/permissions utilizando su token de acceso actual. Esto los desconectará de su aplicación y les pedirá que vuelvan a autenticarse si quieren jugar un poco más. También asegúrese de destruir la sesión php utilizando el código normal de borrado de la sesión php.

+0

¡No creo que quiera eliminar el permiso! ¡Solo un cierre de sesión normal! @DMCS –

+0

"¿Cómo hago un cierre de sesión usando la API de Facebook para desconectarme de mi aplicación (un sitio web), pero mantenme conectado a facebook.com?" Esta es su pregunta, ¿verdad? La única forma de forzar la reautorización es eliminar el token de autenticación actual (al menos así fue en febrero de 2012 ... tal vez Facebook ha cambiado algo). Por favor, infórmenos sobre cómo respondería a su pregunta. – DMCS

+0

@LeonardPauli muy buena solución al problema, me sorprende que este problema que parece ser muy relevante para los sitios web de muchas personas ha cosechado tan poca atención. No hago nada en PHP (C# para mí) así que aprender algo nuevo siempre es divertido. – DMCS

6

Esto funciona para mí:

window.fbAsyncInit = function() { 

FB.getLoginStatus(function(response) { 

    FB.api("/me/permissions", "delete", function(response){ 


    }); 

}); 

} 
6

Un poco tarde, pero podría ayudar a alguien. Puede revocar los permisos de la aplicación que efectivamente los desconecta de su aplicación. Aquí está el código:

FB.api('/me/permissions', 'delete', function(response) { 
    console.log(response.status); // true for successful logout. 
}); 
Cuestiones relacionadas