Pourquoi ce code de connexion Facebook javascript-sdk enregistre-t-il automatiquement l'utilisateur encore et encore?

Ici, je suis incapable de garder un utilisateur déconnecté une fois que l'utilisateur appuie sur le bouton de déconnexion de mon site. Il est redirigé vers la page de connexion, mais la fonction updateButton est appelée à nouveau avec les mêmes informations d'identification qu'il se connecte à nouveau. J'ai essayé plusieurs manières, mais le problème persiste. Je suppose que je ne fais pas correctement les choses dans la fonction UpdateButton ici et que FB.logout () ne se fait pas correctement, car je reçois l'erreur "FB.logout appelé sans jeton d'accès" dans la console. Le code est le suivant:

$(function(){ var button; window.fbAsyncInit = function(){ FB.init({ appId : 'myAppId', status : true, cookie : true, xfbml : true, oauth : true }); function updateButton(response) {// I am not sure I am doing it right here console.log("Update Button Fired."); console.log(response); button = document.getElementById('fb-auth'); if(response.status === 'connected') { FB.api('/me', function(info) { login(response,info); }); } else { FB.login(function(response) { if(response.status === 'not_authorized') { FB.api('/me', function(info){ login(response, info); }); } else { } }, {scope:'email, user_birthday,user_about_me' }); } } } FB.getLoginStatus(updateButton); FB.Event.subscribe('auth.statusChange', updateButton); }; (function() { var e = document.createElement('script'); e.async = true; e.type = 'text/javascript'; e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; document.getElementById('fb-root').appendChild(e); })(); function login(response,info){ console.log('login Showloader called'); if (response.authResponse) { var accessToken = response.authResponse.accessToken; $.post("/web/register/faceBookRegistration",{ data:info,accessTokenValue:accessToken}).done( function(data){ if(typeof(data) != undefined){ window.location = "/web/login/loadViewFaceLogin"; } }); } } function logout(response){ FB.logout(function(response){ console.log("User is now logged out"); }); } }); 

Aussi, je pense que mon déconnexion, c'est-à-dire

  function logout(response){ FB.logout(function(response){ console.log("User is now logged out"); }); } 

n'est pas correcte. Dans la console, il montre que FB.logout est appelé sans un jeton d'accès. Quelle pourrait être la raison

J'ai pris la liberté de réécrire votre code, en gardant vos bases:

  // File - fb-init.js window.fbAsyncInit = function() { FB.init({ appId : app_id, status : false, cookie : true, xfbml : true }); }; (function(d){ var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) {return;} js = d.createElement('script'); js.id = id; js.async = true; js.src = "//connect.facebook.net/en_US/all.js"; ref.parentNode.insertBefore(js, ref); }(document)); 

  // File - main.js $('#fb-login').on('click', function() { FB.getLoginStatus(function(responseStatus) { if (responseStatus.status === 'connected') { FB.api('/me', function(responseMe) { if (!responseMe.id) return false; var accessToken = responseMe.authResponse.accessToken; $.post('/web/register/faceBookRegistration' { data : responseMe, accessTokenValue : accessToken }).done(function(data) { if (typeof(data) !== 'undefined') window.location = '/web/login/loadViewFaceLogin'; }); }); } else if (responseStatus.status === 'not_authorized') { FB.login(function(responseLogin) { FB.api('/me', function(responseMe) { if (!responseMe.id) return false; var accessToken = responseMe.authResponse.accessToken; $.post('/web/register/faceBookRegistration' { data : responseMe, accessTokenValue : accessToken }).done(function(data) { if (typeof(data) !== 'undefined') window.location = '/web/login/loadViewFaceLogin'; }); }); }, {scope:'email, user_birthday,user_about_me' }); } else return false; }); }); $('#fb-logout').on('click', function() { FB.logout(function(responseLogout) { }); }); 

En raison de l' état défini sur true . Si l'utilisateur actuel est déjà connecté sur Facebook, cela force sa connexion automatique sur le site.

Quoi qu'il en soit, ce n'est pas une bonne idée d'utiliser FB.logout (), sauf si vous souhaitez forcer l'utilisateur à se déconnecter de Facebook (et non de votre site Web).

À propos du popup, je pense que c'est à cause de FB.getLoginStatus (updateButton); Qui appelle la fonction updateButton () sur chaque page chargée.

Vous devriez l'améliorer grâce à une fonction onclick.

Comme j'ai vu ce Post FB.logout () appelé sans un jeton d'accès, il a confirmé ce que j'ai toujours pensé que mon déconnexion ne se faisait pas correctement. Si cela se fait, je serais d'accord.

Voici le code de fonction de déconnexion qui l'a fait pour moi: –

  function logout(response){ if(!response.authResponse){ window.location = "/web/login/"; return; } FB.logout(function(response){ FB.Auth.setAuthResponse(null,'unknown'); logout(response); }); } 

Comme dans le lien ci-dessus, il a été dit que nous devrions continuer à envoyer la demande de connexion jusqu'à sa destruction sur le côté Facebook. Je l'ai fait un appel récursif et la sortie était lorsque le contrôle l'a confirmé.

Je suis un noob et je serais content que quelqu'un travaillant sur la solution actuelle crée un hack plus élégant.

Merci à 'ZeNy' aussi.