71 votes

Déconnexion Facebook Oauth

J'ai une application qui s'intègre à Facebook en utilisant Oauth 2.

Je peux m'autoriser auprès de FB et interroger leurs API REST et Graph parfaitement bien, mais lorsque j'autorise une session active du navigateur est créée avec FB. Je peux ensuite me déconnecter de mon application sans problème, mais la session avec FB persiste, de sorte que si quelqu'un d'autre utilise le navigateur, il verra le compte FB de l'utilisateur précédent (à moins que ce dernier ne se déconnecte manuellement de FB également).

Les mesures que je prends pour obtenir l'autorisation sont les suivantes :

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

Cette étape ouvre une fenêtre de connexion à Facebook si le navigateur de l'utilisateur n'a pas déjà une session FB active. Une fois qu'il s'est connecté à Facebook, il est redirigé vers mon site avec un code que je peux échanger contre un jeton oauth.

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

J'ai maintenant un jeton Oauth, et le navigateur de l'utilisateur est connecté à mon site et à FB.

  1. J'appelle un tas d'API pour faire des choses : par exemple [LINK : graph.facebook.com/me?access_token=..]

Disons que mon utilisateur souhaite se déconnecter de mon site. Les conditions générales de Facebook exigent que je procède à une déconnexion unique, de sorte que lorsque l'utilisateur se déconnecte de mon site, il est également déconnecté de Facebook. Certains prétendent que c'est un peu stupide, mais je suis heureux de m'y conformer s'il existe un moyen d'y parvenir.

J'ai vu des suggestions à ce sujet :

A. J'utilise l'API Javascript pour me déconnecter : FB.Connect.logout(). J'ai essayé de l'utiliser, mais cela n'a pas fonctionné et je ne sais pas exactement comment, car je n'utilise pas l'API Javascript de quelque manière que ce soit sur mon site. La session n'est pas maintenue ou créée par l'API Javascript, donc je ne sais pas non plus comment elle est censée expirer.

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

C. Utiliser l'ancienne api REST expireSession ou revokeAuthorization. J'ai essayé ces deux méthodes et, bien qu'elles fassent expirer le jeton Oauth, elles n'invalident pas la session que le navigateur utilise actuellement, ce qui n'a aucun effet, l'utilisateur n'étant pas déconnecté de Facebook.

Je suis un peu perdue, la documentation de Facebook est inégale, ambiguë et assez pauvre. L'assistance sur les forums est inexistante, pour l'instant 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. Cela n'inspire pas vraiment confiance.

Merci pour toute aide que vous pourrez m'apporter. Derek

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

2 votes

Sean a raison, et vous devriez l'écouter, car il a plus de réputation que vous, ce qui lui donne raison. Si je suis connecté à Facebook, que j'arrive sur votre site, que je l'utilise (ou que je décide de le quitter en étant déçu), puis que je me déconnecte, je serais surpris et peut-être même un peu outré si je découvrais que j'ai également été déconnecté de Facebook. Si l'interface utilisateur indiquait clairement que cela se produirait, très bien, mais s'il s'agit simplement d'un bouton dans le coin supérieur droit de la page qui dit "Déconnexion", avec peut-être un logo Facebook flottant à proximité, c'est assez surprenant. La surprise n'est pas une caractéristique d'une bonne interface utilisateur.

6 votes

1 votes

@DigitalPrecision : Un excellent lien, qui montre que même Facebook n'arrive pas à faire les choses correctement.

44voto

Christoph Points 1397

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

<a href="http://stackoverflow.com/logout" onclick="FB.logout();">Logout</a> 

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

Bien que je préférerais aussi une solution côté serveur, mais au moins elle fait ce que je veux, elle me déconnecte sur les deux sites.

Je suis également assez novice dans le domaine de l'intégration de Facebook et j'ai joué avec pour la première fois, mais mon sentiment général est que la documentation est assez dispersée, avec beaucoup de choses dépassées.

1 votes

Merci Christoph ! J'ai essayé et cela fonctionne effectivement. Auparavant, j'avais essayé d'utiliser FB.Connect.logout et FB.Connect.logoutAndRedirect, qui, je pense, proviennent d'une ancienne version de l'API. Comme vous le dites, la documentation est assez fragmentée. J'ajoute qu'avant d'appeler FB.logout, je devais appeler FB.init, comme indiqué sur la page FB Javascript API. Merci pour votre aide.

1 votes

Juste une mise à jour, cette solution ne fonctionne pas dans Chrome (5.0.375 au moins) sur un mac. L'utilisateur n'est pas déconnecté de FB, mais cela fonctionne bien dans Safari et Firefox

2 votes

Ma page de déconnexion devait effectuer une vérification de la connexion FB. Le clic sur FB.logout() ne se terminait pas assez vite avant la redirection. J'ai dû retarder la redirection pour m'assurer que FB.logout() se termine d'abord avec succès.

19voto

sumit Points 175

Cette solution ne fonctionne plus avec l'API actuelle de FaceBook (il semble que ce n'était pas prévu au départ).

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

Essayez de donner ce lien sur le lien ou le bouton de sortie où "yoursitename.com" est l'endroit où vous voulez rediriger après la sortie. est l'endroit où vous voulez être redirigé après la déconnexion, peut-être votre page d'accueil.

Ça marche

1 votes

Sumit, merci. Cela fonctionne parfaitement. Je ne sais pas vraiment pourquoi la version mobile de Facebook permet de se déconnecter comme ça alors que l'autre ne le fait pas, mais je m'en fiche. C'est mieux que le hack jscript que j'utilise en ce moment, et plus facile que la déconnexion principale de facebook + clé de session décrite par ici également.

6 votes

Mais que faire si l'utilisateur n'a pas veulent leur session facebook à être détruite ? Et s'ils étaient déjà connectés à Face Book, puis se connectent à votre site, puis se déconnectent de votre site, puis retournent sur Facebook et ne comprennent pas pourquoi ils viennent d'être déconnectés ? Cela ne semble pas être la solution idéale...

3 votes

Lorsque cette question a été posée il y a quelques mois, la déconnexion unique était une exigence des conditions générales de Facebook. Je ne sais pas si c'est toujours le cas, et je ne suis pas en désaccord avec vous, mais à l'époque, c'était obligatoire.

19voto

russau Points 4835

Cela fonctionne pour l'instant - et c'est documenté sur le site de facebook @ http://developers.facebook.com/docs/authentication/ . Je ne sais pas si cela a été ajouté récemment à la documentation, je suis presque sûr que ce n'était pas là quand j'ai vérifié en février 2012.

Vous pouvez programmer la déconnexion de l'utilisateur de Facebook en redirigeant l'utilisateur vers

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

6 votes

Je n'arrive pas à le faire fonctionner. J'utilise la méthode de connexion côté serveur. De plus, si le lien de la documentation pointait vers cette méthode, il ne le fait plus.

1 votes

@DanielGerson lorsque vous utilisez ssc vous obtiendrez le jeton d'accès comme réponse de facebook. Cela fonctionnera si vous envoyez le jeton d'accès au client, afin que ce dernier puisse l'utiliser dans le lien de déconnexion.

11voto

Tealc Wu Points 129

Je peux programmer la déconnexion de l'utilisateur de Facebook en redirigeant l'utilisateur vers

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

L'URL fournie dans le paramètre suivant doit être une URL avec le même domaine de base que votre application, tel que défini dans les paramètres de votre application.

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

6voto

Zach Greenberger Points 250

Vous pouvez le faire avec le access_token :

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

$session_key = $access_array[1];

Vous pouvez utiliser cette $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));

Cela met fin à la session facebook du navigateur.

1 votes

Vous n'avez pas besoin de travailler avec le jeton manuellement car $facebook l'a déjà.

1 votes

Pourriez-vous expliquer plus en détail ce que vous voulez dire ? Cette méthode est la seule que j'ai trouvée pour déconnecter l'utilisateur et mettre fin à la session FB sans utiliser de javascript.

3 votes

Bob, voici la structure de l'URL de déconnexion : facebook.com/ > Où session_key est la partie centrale du jeton d'accès comme je l'ai décrit ci-dessus.

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