21 votes

Le SDK JavaScript de Facebook FB.logout() ne met pas fin à la session utilisateur

Je tente de déconnecter un utilisateur de Facebook avec le SDK Facebook JS, cependant en appelant :

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

renvoie : response.status == "connected"

Et ce n'est qu'après avoir rafraîchi la page que le SDK se rend compte que la session est terminée. Quelqu'un sait ce qui pourrait causer ce comportement ? Ce code fonctionnait précédemment dans mon application et a récemment commencé à se comporter de cette manière.

Un autre exemple en utilisant FireBug :

entrer la description de l'image ici

14voto

Sean Kinsey Points 17117

https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a96454690 Il s'agit d'un bug dans le SDK JS qui a maintenant été corrigé et il devrait être déployé dans pas trop longtemps.
En attendant, vous pouvez faire ce qui suit

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

3voto

max Points 103

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

Lorsque vous vous déconnectez, une requête cross-domain est envoyée à Facebook pour invalider la session. Lorsque vous actualisez la page, une autre requête est envoyée au site de Facebook - comme FB reconnaît le cookie comme invalide, il supprime correctement le cookie de votre navigateur.

Je soupçonne qu'il s'agit d'un bug de regexp dans la façon dont ils ont oublié de parser le cookie fbm_, récemment introduit il y a un jour ou deux. Je suis juste surpris que cette correction n'ait pas été déployée.

3voto

NavCore Points 375
FB.logout(function(response) {
  ...
});

Cette méthode FB.logout fonctionne à 100 %. Le problème est que les utilisateurs essaient de l'appeler depuis localhost, ce qui ne fonctionne pas.

Veuillez essayer de l'appeler depuis le serveur.

3voto

vishnu lal Points 26

Comme j'ai passé beaucoup de temps à découvrir exactement ce qui se passe lors de la déconnexion de FB, j'ai préféré le partager ici pour les autres.

Première chose, veuillez lire la documentation ici

Une personne se connecte sur Facebook, puis se connecte à votre application. En se déconnectant de votre application, cette personne reste connectée sur Facebook.

Ce point a pris 90% de mon temps. Quand je me suis connecté depuis facebook.com et que j'ai essayé de tester le bouton de connexion dans mon application, cela a fonctionné comme prévu, mais la déconnexion ne mettait pas fin à la session.

Solution ou correctif : Comme indiqué dans les scénarios donnés dans le document, cela ne mettra pas fin à la session de l'utilisateur, car la connexion n'est pas initiée depuis l'application, mais depuis facebook.com. donc dans ce cas, fb ne mettra pas fin à la session.

Lorsque vous vous connectez à fb, depuis votre application (nouvelle connexion en tant que nom d'utilisateur et mot de passe), le système considère la source/déclencheur de la session comme étant votre application. donc lorsque vous vous déconnectez (window.FB.logout ou FB.logout) cela mettra fin complètement à la session de l'utilisateur.

Veuillez donc vous déconnecter de facebook.com avant de tester la fonctionnalité de connexion dans votre application.

Comme mentionné par d'autres, utilisez le code ci-dessous pour vous déconnecter

FB.logout(function(response) {
 // la réponse de la déconnexion comportera authResponse avec le jeton d'accès, il est donc préférable de tester le statut car il renverra "inconnu"
 if(response.status !== "connected") { } \\ effectuer une vérification sur le statut de la connexion avant de considérer la déconnexion réussie.
});

Enfin, pour tester depuis localhost, veuillez mettre à jour les paramètres dans l'APP FB

  1. Mettons à jour Domaines de l'application à localhost
  2. URL du site sous Site Web à http://localhost:3000/

Cela résoudra les problèmes rencontrés lors des tests depuis localhost

1voto

Pat James Points 3705

J'ai la même expérience avec le FB.Logout() ne fonctionnant pas comme annoncé. Comme solution de contournement, j'utilise la fonction javascript ci-dessous pour vérifier si l'utilisateur est connecté et, le cas échéant, le rediriger vers https://www.facebook.com/logout.php avec l'URL de la page suivante à charger et leur jeton d'accès :

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

La partie show/hide correspond simplement à jQuery pour afficher ou masquer des divs contenant un bouton de connexion et de déconnexion. Le bouton de déconnexion déclenche l'exécution de la fonction reallyLogout() lors du clic.

Cela fonctionne pour mon application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X