web-dev-qa-db-fra.com

Facebook JS SDK FB.logout () ne termine pas la session de l'utilisateur

J'essaie de déconnecter un utilisateur de Facebook avec le SDK JS de Facebook, mais en appelant:

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

renvoie: response.status == "connecté"

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

Un autre exemple utilisant FireBug:

enter image description here

18
Casey Flynn

https://developers.facebook.com/bugs/245362365535898?browse=search_4f1121356643a96454690 Il s'agit d'un bogue dans le SDK JS qui a été corrigé et qui ne devrait pas être inséré longtemps.
Jusque-là, vous pouvez faire ce qui suit

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

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

Lorsque vous vous déconnectez, une requête interdomaine est envoyée à Facebook pour invalider la session. Lorsque vous cliquez sur Reload, une autre demande est envoyée au site de Facebook. Comme FB reconnaît le cookie comme non valide, il supprime correctement le cookie de votre navigateur.

Je soupçonne que c'est un bogue de l'expression rationnelle dans la façon dont ils ont oublié d'analyser le cookie fbm_, récemment introduit depuis environ un jour. Je suis juste surpris que ce correctif n'a pas été poussé.

3
Roger
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. 

S'il vous plaît essayez d'appeler depuis le serveur.

3
NavCore

Comme j'ai passé beaucoup de temps à découvrir exactement ce qui se passe dans le logout FB, je me suis senti mieux de le partager ici pour les autres.

Première chose, veuillez lire la documentation ici

Une personne se connecte à Facebook, puis à votre application. Lorsque vous vous déconnectez de votre application, la personne est toujours connectée à Facebook.

ce point a tué 90% de mon temps. Lorsque je me suis connecté à partir de 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 solution: Selon les scénarios indiqués dans le document, la session de l'utilisateur ne sera pas terminée car le nom de connexion est non initié depuis l'application, il provient de facebook.com. donc dans ce cas, fb ne terminera pas la session.

Lorsque vous vous connectez à fb, à partir de votre application (identifiez-vous en tant que nom d'utilisateur et mot de passe), le système considère la source/le déclencheur de la session comme votre application. Ainsi, lorsque vous vous déconnectez (window.FB.logout ou FB.logout), la session utilisateur est complètement terminée.

Alors, veuillez vous déconnecter de facebook.com avant de tester la fonctionnalité de connexion dans votre application.

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

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

Dernier point mais non le moindre: pour tester à partir de localhost, veuillez mettre à jour les paramètres dans FB APP

  1. Mettre à jour Domaines d'applications à localhost
  2. URL du site sous Sites Web àhttp: // localhost: 3000/

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

2
vishnu lal

J'ai rencontré le même genre de problème. J'ai utilisé FB.getLoginStatus() après la déconnexion.

1
Abdul Ahad

J'ai la même expérience avec la FB.Logout() qui ne fonctionne 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, 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 to redirect to' +
             "&access_token=" + response.authResponse.accessToken;
        } else {
           $("#loginButtonDiv").show();
           $("#logoutButtonDiv").hide();
        }
      });
    }

Le bit afficher/masquer est simplement jQuery pour afficher ou masquer les div ayant un bouton de connexion et de déconnexion. Le bouton de déconnexion onclick déclenche la fonction reallyLogout ().

Cela fonctionne pour mon application.

1
Pat James

dans asp.net mvc application je l'ai fait comme suit.


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

    });
0
aamir sajjad

Il semble cassé dans Facebook. Sur FB rell, vous pouvez vous connecter mais la fonction de déconnexion ne fait rien. http://www.fbrell.com/auth/all-in-one

0
Shaun

Ok les gars, j'ai trouvé une solution pour cela:

Mettre en place l'événement onClick pour la balise <a> de déconnexion comme ceci 

onclick="FB.logout(function() { document.location.reload(); });"

Tous ensemble:

<a href="#" 
   id="auth-logoutlink"
   style="float:left;font-size: small;"
   onclick="FB.logout(function() { document.location.reload(); });">
   [logout]
</a>
0
sajanyamaha