Ich habe eine Anwendung, die mit Oauth 2 in Facebook integriert wird.
Ich kann mit FB autorisieren und ihre REST- und Graph-APIs perfekt abfragen, aber wenn ich autorisiere, wird mit FB eine aktive Browsersitzung erstellt. Ich kann mich dann problemlos von meiner Anwendung abmelden, aber die Sitzung mit FB bleibt bestehen. Wenn also jemand anderes den Browser verwendet, wird das FB-Konto des vorherigen Benutzers angezeigt (es sei denn, der vorherige Benutzer meldet sich ebenfalls manuell vom FB ab).
Die Schritte, die ich zur Autorisierung unternehme, sind:
- Rufen Sie [LINK: graph.facebook.com/oauth/authorize?client_id ...] auf.
Dieser Schritt öffnet ein Facebook-Anmelde- / Verbindungsfenster, wenn der Browser des Benutzers noch keine aktive FB-Sitzung hat. Sobald sie sich bei Facebook angemeldet haben, leiten sie mit einem Code, den ich gegen ein Oauth-Token eintauschen kann, auf meine Website weiter.
- Rufen Sie [LINK: graph.facebook.com/oauth/access_token?client_id ..] mit dem Code von (1) auf.
Jetzt habe ich ein Oauth-Token und der Browser des Benutzers ist auf meiner Site und in FB angemeldet.
- Ich rufe eine Reihe von APIs auf, um Dinge zu erledigen: dh [LINK: graph.facebook.com/me?access_token= ..]
Nehmen wir an, mein Benutzer möchte sich von meiner Website abmelden. Die FB-Nutzungsbedingungen verlangen, dass ich Single Sign Off durchführe. Wenn sich der Benutzer von meiner Website abmeldet, werden sie auch von Facebook abgemeldet. Es gibt Argumente, dass dies ein bisschen dumm ist, aber ich bin gerne bereit, dem nachzukommen, wenn es eine Möglichkeit gibt, dies tatsächlich zu erreichen.
Ich habe Vorschläge gesehen, die:
A. Ich verwende die Javascript-API zum Abmelden: FB.Connect.logout (). Nun, ich habe versucht, das zu verwenden, aber es hat nicht funktioniert, und ich bin mir nicht sicher, wie es genau sein könnte, da ich die Javascript-API auf meiner Website in keiner Weise verwende. Die Sitzung wird nicht von der Javascript-API verwaltet oder erstellt, daher bin ich mir nicht sicher, wie sie ablaufen soll.
B. Verwenden Sie [LINK: facebook.com/logout.php]. Dies wurde vor einiger Zeit von einem Administrator in den Facebook-Foren vorgeschlagen. Das Beispiel bezog sich auf die alte Art, FB-Sitzungen zu erhalten (nicht oauth), daher glaube ich nicht, dass ich es in meinem Fall anwenden kann.
C. Verwenden Sie die alte REST-API expireSession oder revokeAuthorization. Ich habe beide ausprobiert und während sie das Oauth-Token ablaufen lassen, machen sie die Sitzung, die der Browser derzeit verwendet, nicht ungültig, sodass sie keine Auswirkungen hat. Der Benutzer ist nicht von Facebook abgemeldet.
Ich bin wirklich ein bisschen am Ende, die Facebook-Dokumentation ist lückenhaft, mehrdeutig und ziemlich schlecht. Die Unterstützung in den Foren ist nicht vorhanden, im Moment kann ich mich nicht einmal im Facebook-Forum anmelden, und abgesehen davon funktioniert die eigene FB Connect-Integration nicht einmal im Forum selbst. Inspiriert nicht viel Vertrauen.
Ta für jede Hilfe, die Sie anbieten können. Derek
ps. Musste HTTPS in LINK ändern, nicht genug Karma, um Links zu posten, was wahrscheinlich fair genug ist.
Antworten:
Ich habe das gleiche Problem. Ich melde mich auch mit oauth an (ich verwende RubyOnRails), aber zum Abmelden mache ich es mit JavaScript über einen Link wie diesen:
<a href="/logout" onclick="FB.logout();">Logout</a>
Dies ruft zuerst die
onclick
Funktion auf und führt eine Abmeldung auf Facebook durch, und dann wird die normale/logout
Funktion meiner Site aufgerufen.Ich würde zwar auch eine serverseitige Lösung bevorzugen, aber sie macht zumindest das, was ich will, und meldet mich an beiden Standorten ab.
Ich bin auch ziemlich neu in der Facebook-Integration und habe das erste Mal damit gespielt, aber mein allgemeines Gefühl ist, dass die Dokumentation mit vielen veralteten Sachen ziemlich weit verbreitet ist.
quelle
Dies funktioniert ab sofort - und ist auf der Facebook-Website unter http://developers.facebook.com/docs/authentication/ dokumentiert . Ich bin mir nicht sicher, wie kürzlich es zur Dokumentation hinzugefügt wurde. Ich bin mir ziemlich sicher, dass es nicht vorhanden war, als ich im Februar 2012 nachgesehen habe
quelle
Diese Lösung funktioniert nicht mehr mit der aktuellen API von FaceBook (anscheinend war sie zunächst nicht beabsichtigt).
Versuchen Sie, diesen Link auf Ihrem Abmeldelink oder der Schaltfläche anzugeben, auf der "yoursitename.com" angezeigt wird, wo Sie nach dem Abmelden möglicherweise Ihre Startseite zurückleiten möchten.
Es klappt..
quelle
Ich kann den Benutzer programmgesteuert bei Facebook abmelden, indem ich den Benutzer zu weiterleite
https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN
Die im nächsten Parameter angegebene URL muss eine URL mit derselben Basisdomäne wie Ihre Anwendung sein, wie in den Einstellungen Ihrer App definiert.
Weitere Details: https://developers.facebook.com/docs/authentication
quelle
Sie können dies tun mit
access_token
:$access_array = split("\|", $access_token); $session_key = $access_array[1];
Sie können dies
$session key
im PHP SDK verwenden, um eine funktionale Abmelde-URL zu generieren.$logoutUrl = $facebook->getLogoutUrl(array('next' => $logoutUrl, 'session_key' => $session_key));
Damit ist die Facebook-Sitzung des Browsers beendet.
quelle
Mit PHP mache ich:
Funktioniert und ist nett und einfach Ich versuche gerade, eine Abmeldeschaltflächengrafik zu finden!
quelle
Hier ist eine Alternative zu der akzeptierten Antwort, die in der aktuellen (2.12) Version der API funktioniert.
quelle
Die von Sumit vorgeschlagene mobile Lösung funktioniert perfekt für AS3 Air:
html.location = "http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com"
quelle
Für Python-Entwickler, die Benutzer direkt vom Backend abmelden möchten
Im Moment schreibe ich dies, den Trick mit m.facebook.com funktioniert nicht mehr (zumindest für mich) und der Benutzer wird auf die Anmeldeseite für mobile FB umgeleitet, was offensichtlich nicht gut für UX ist.
Glücklicherweise hat das FB PHP SDK eine halb dokumentierte Lösung (falls der Link nicht zur
getLogoutUrl()
Funktion führt, suchen Sie einfach auf dieser Seite danach). Dies wird auch in mindestens einem anderen auf StackOverflow erwähnt: Facebook PHP SDK getLogoutUrl () Problem .Übrigens habe ich gerade bemerkt, dass Zach Greenberg es in dieser Frage richtig gemacht hat , aber ich füge meine Antwort als Zusammenfassung für Python-Entwickler hinzu.
quelle
Ein Hinweis für Christophs Antwort: Facebook Oauth Logout Die Logout-Funktion erfordert die Angabe einer Rückruffunktion und schlägt zumindest unter Firefox ohne diese Funktion fehl. Chrome funktioniert ohne Rückruf.
FB.logout(function(response) {});
quelle
@Christoph: nur etwas hinzufügen. Ich glaube nicht, dass dies der richtige Weg ist, sich an beiden Orten gleichzeitig abzumelden. (
<a href="https://stackoverflow.com/logout" onclick="FB.logout();">Logout</a>
).quelle
Update:
Diese Lösung funktioniert und nur ein Aufruf von 'FB.logout ()' funktioniert nicht, da der Browser möchte, dass eine Benutzerinteraktion diese Funktion tatsächlich aufruft, damit er weiß - es ist ein Benutzer, kein Skript.quelle
Es ist einfach, geben Sie einfach Folgendes ein: $ facebook-> setSession (null); zum Abmelden
quelle