Déconnexion De Facebook

j'ai une application qui s'intègre avec Facebook en utilisant Oauth 2.

je peux Autoriser avec FB et interroger leurs APIs REST et Graph parfaitement, mais quand j'autorise une session active de navigateur est créé avec FB. Je peux alors me déconnecter de mon application très bien, mais la session avec FB persiste, donc si quelqu'un d'autre utilise le navigateur ils verront les utilisateurs précédents compte FB (à moins que l'utilisateur précédent se connecte manuellement hors de FB aussi).

Les mesures que je prends pour autoriser sont:

  1. Appel [LIEN: graph.facebook.com/oauth/authorize?client_id...]

cette étape ouvre une fenêtre de connexion/Connexion Facebook si le navigateur de l'utilisateur n'a pas déjà une session FB active. Une fois qu'ils se connectent à facebook, ils redirigent vers mon site avec un code que je peux échanger contre un jeton oauth.

  1. Appel [LIEN: graph.facebook.com/oauth/access_token?client_id..] avec le code de (1)

maintenant j'ai un Token autre, et le navigateur de l'utilisateur est connecté dans mon site, et dans FB.

  1. j'appelle un tas d'Api pour faire des trucs à savoir: [LIEN: graph.facebook.com/me?access_token=..]

disons que mon utilisateur veut se déconnecter de mon site. Les Termes et conditions de FB exigent que j'effectue un seul arrêt, de sorte que lorsque l'utilisateur se connecte hors de mon site, ils sont également déconnectés de Facebook. Il y a des arguments selon lesquels c'est un peu stupide, mais je suis heureux de m'y conformer s'il y a un moyen d'y parvenir.

j'ai vu des suggestions que:

A. j'utilise L'API Javascript pour me déconnecter: FB.Connecter.déconnexion.)( J'ai essayé d'utiliser ça, mais ça n'a pas marché, et je ne sais pas exactement comment ça a marché, car je n'utilise pas L'API Javascript sur mon site. La session N'est pas maintenue ou créée par L'API Javascript, donc je ne sais pas comment elle est censé expirer.

B. Utiliser [lien: facebook.com/logout.php]. Cela a été suggéré par un administrateur sur les forums Facebook il y a quelque temps. L'exemple donné concernait l'ancienne façon d'obtenir des sessions FB (non-oauth) donc je ne pense pas que je puisse l'appliquer dans mon cas.

C. Utilisez l'ancienne expireSession ou revokeAuthorization de L'api REST. J'ai essayé ces deux-là et pendant qu'ils expirent le jeton Oauth ils n'invalident pas la session que le navigateur est actuellement à l'aide de sorte qu'il n'a pas d'effet, l'utilisateur n'est pas déconnecté de Facebook.

je suis vraiment à bout de nerfs, la documentation Facebook est inégale, ambiguë et assez pauvre. Le support sur les forums n'existe pas, pour le moment je ne peux même pas me connecter au forum facebook, et à part cela, leur propre intégration FB Connect ne fonctionne même pas sur le forum lui-même. Ne pas inspirer la confiance.

Ta pour toute aide que vous pouvez offrir. Derek

ps. J'ai dû changer HTTPS pour LINK, pas assez de karma pour poster des liens ce qui est probablement assez juste.

66
demandé sur Derek Troy-West 2010-05-04 14:22:23

13 réponses

j'ai le même problème. Je me connecte aussi en utilisant oauth( J'utilise RubyOnRails), mais pour la déconnexion, je le fais avec JavaScript en utilisant un lien comme ceci:

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

ceci appelle d'abord la fonction onclick et effectue une déconnexion sur facebook, puis la fonction normale /logout de mon site est appelé.

bien que je préférerais une solution serverside aussi, mais au moins il fait ce que je veux, il me logue sur les deux sites.

Je suis également tout à fait nouveau à la chose d'intégration Facebook et joué autour de la première fois avec elle, mais mon sentiment général est que la documentation est assez répandue partout avec beaucoup de choses périmées.

41
répondu Christoph 2013-07-01 21:46:52

cela fonctionne dès maintenant - et est documentée sur le site de facebook @ http://developers.facebook.com/docs/authentication / . Pas sûr comment récemment il a été ajouté à la documentation, assez sûr qu'il n'était pas là quand j'ai vérifié fév-2012

vous pouvez programmatically log l'utilisateur de Facebook en redirigeant l'utilisateur à

https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

18
répondu russau 2012-03-21 06:09:55

Cette solution ne fonctionne plus avec L'API actuelle de FaceBook (il semble qu'elle ait été involontaire pour commencer)

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

essayez de donner ce lien sur vous le lien d'inscription ou le bouton où "yoursitename.com" est l'endroit où vous voulez rediriger retour après signout peut être votre page d'accueil.

ça marche..

18
répondu sumit 2013-07-01 21:57:32

je peux programmatiquement déconnecter L'utilisateur Facebook en redirigeant l'utilisateur vers

https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

L'URL fourni dans le paramètre suivant doit être une URL avec le même domaine que votre application tel que défini dans votre application réglages.

plus de détails: https://developers.facebook.com/docs/authentication

7
répondu Tealc Wu 2013-09-13 16:29:40

Vous pouvez le faire avec le access_token :

$access_array = split("\|", $access_token);

$session_key = $access_array[1];

vous pouvez utiliser ce $session key dans le SDK PHP pour générer une URL de déconnexion fonctionnelle.

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

ceci termine la session facebook du navigateur.

5
répondu Zach Greenberger 2013-07-01 22:06:18

avec PHP je fais:

<a href="?action=logout">logout.</a>

if(isset($_GET['action']) && $_GET['action'] === 'logout'){
    $facebook->destroySession();
    header(WHERE YOU WANT TO REDIRECT TO);
    exit();
}

fonctionne et est agréable et facile je suis juste essayer de trouver un bouton de déconnexion graphique maintenant!

1
répondu Mike Wells 2014-03-14 10:53:17

Voici une alternative à la réponse acceptée qui fonctionne dans la version actuelle (2.12) de l'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>
1
répondu Pluc 2018-03-22 19:33:01

la solution mobile proposée par Sumit fonctionne parfaitement pour L'air AS3:

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

0
répondu shi11i 2010-09-13 21:25:11

pour les développeurs Python qui veulent déconnecter l'utilisateur directement depuis le backend

au moment où j'écris ceci, le truc avec m.facebook.com ne fonctionne plus (au moins pour moi) et l'utilisateur est redirigé vers la page de connexion mobile FB qui n'est évidemment pas bon pour UX.

heureusement, FB PHP SDK a un solution semi-documentée (dans le cas où le lien ne conduit pas à getLogoutUrl() fonction, juste recherche chercher sur cette page). Cela est également mentionné dans au moins un autre sur StackOverflow: Facebook PHP SDK getLogoutUrl() problème .

BTW je viens de remarquer que Zach Greenberg a raison dans cette question, mais j'ajoute ma réponse comme un résumé pour les développeurs Python.

0
répondu Tomasz Zielinski 2017-05-23 12:17:42

une note pour la réponse de Christoph: Facebook Oauth Logout La fonction de déconnexion nécessite une fonction de rappel à spécifier et échouera sans elle, au moins sur Firefox. Chrome fonctionne sans le rappel.

FB.logout(function(response) {});
0
répondu zoli 2017-05-23 12:17:42

@Christoph: j'ajoute quelque chose . Je ne pense pas que ce soit une façon correcte.pour se déconnecter aux deux endroits en même temps.( <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;


        });
});});
0
répondu Sohail 2013-12-08 21:16:07

Update: Cette solution fonctionne et juste un appel à ' FB.logout ()' ne fonctionne pas parce que le navigateur veut qu'une interaction utilisateur appelle réellement cette fonction, de sorte qu'il sait - c'est un utilisateur pas un script.

<a href="#" onclick="FB.logout();">Logout</a> 
0
répondu halkujabra 2014-02-28 11:17:15

tapez simplement: $ facebook - >setSession (null); for logout

-6
répondu Saiful Amri 2010-07-17 08:07:15