Facebook Oauth注销

我有一个使用Oauth 2与Facebook集成的应用程序。

我可以使用FB进行授权,并且可以很好地查询他们的REST和Graph API,但是当我授权使用FB创build活动的浏览器会话时。 然后我可以注销我的应用程序,但是与FB的会话仍然存在,所以如果其他人使用浏览器,他们将看到以前的用户FB帐户(除非以前的用户手动注销FB)。

我采取的授权步骤是:

  1. 致电[链接:graph.facebook.com/oauth/authorize?client_id …]

如果用户的浏览器尚未具有活动的FB会话,则此步骤将打开Facebooklogin/连接窗口。 一旦他们login到Facebook,他们redirect到我的网站与代码,我可以交换一个oauth令牌。

  1. 使用(1)中的代码调用[LINK:graph.facebook.com/oauth/access_token?client_id ..]

现在我有一个Oauth令牌,用户的浏览器login到我的站点,并进入FB。

  1. 我调用了一堆API来做一些事情,例如[LINK:graph.facebook.com/me?access_token = ..]

可以说我的用户想要退出我的网站。 FB的条款和条件要求我执行Single Sign Off,所以当用户退出我的网站时,他们也会从Facebook注销。 有人认为这有点愚蠢,但我很乐意遵守,如果有什么方法可以实现的话。

我见过这样的build议:

答:我使用Javascript API来注销:FB.Connect.logout()。 那么我试图使用,但它没有工作,我不知道它是如何,因为我不使用JavaScript API以任何方式在我的网站上。 会话不是由JavaScript API维护或创build的,所以我不知道它是如何过期的。

B.使用[LINK:facebook.com/logout.php]。 这是一个pipe理员在Facebook论坛上提出的。 给出的例子涉及到获得FB会话的旧方法(非oauth),所以我不认为我可以将其应用于我的情况。

C.使用旧的REST api expireSession或revokeAuthorization。 我尝试了这两种方法,当他们过期Oauth令牌时,他们不会使浏览器当前正在使用的会话无效,所以它没有任何作用,用户没有从Facebook注销。

我真的有一个松散的结局,Facebook的文档是不完整的,模棱两可的和相当差的。 在论坛上的支持是不存在的,目前我甚至不能login到Facebook论坛,除此之外,他们自己的FB Connect集成甚至不能在论坛上工作。 不会激发更多的信心。

塔为您提供的任何帮助。 德里克

PS。 不得不改变HTTPS链接,没有足够的业力张贴链接,这可能是公平的。

我有同样的问题。 我也login使用oauth(我正在使用RubyOnRails),但为了注销,我使用JavaScript这样的链接:

<a href="/logout" onclick="FB.logout();">Logout</a> 

首先调用onclick函数并在Facebook上执行注销,然后调用我的站点的正常/logoutfunction。

虽然我更喜欢服务器端的解决scheme,但至less它是做我想做的,它会在两个站点上注销。

对于Facebook的整合,我也是一个相当新的东西,并且第一次使用它,但是我的总体感觉是这个文档相当stream行,有很多过时的东西。

这个解决scheme不再适用于FaceBook的当前API(似乎是无意的开始)

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

尝试给你这个链接登出链接或button,其中“yoursitename.com”是您要重新注册后,您可以在您的主页上注销。

有用..

这工作到现在为止,并logging在Facebook的网站@ http://developers.facebook.com/docs/authentication/ 。 不知道最近它被添加到文档,很确定它不在那里,当我检查2012年2月

您可以编程方式通过redirect用户login到我们的Facebook用户

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

我可以通过redirect用户来以编程方式将用户登出Facebook

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

下一个参数中提供的URL必须是与应用程序设置中定义的应用程序具有相同基本域的URL。

更多细节: https : //developers.facebook.com/docs/authentication

你可以用access_token来做到这一点:

 $access_array = split("\|", $access_token); $session_key = $access_array[1]; 

您可以使用PHP SDK中的$session key来生成function性注销URL。

 $logoutUrl = $facebook->getLogoutUrl(array('next' => $logoutUrl, 'session_key' => $session_key)); 

这结束了浏览器的Facebook会话。

用PHP我正在做:

 <a href="?action=logout">logout.</a> if(isset($_GET['action']) && $_GET['action'] === 'logout'){ $facebook->destroySession(); header(WHERE YOU WANT TO REDIRECT TO); exit(); } 

工程,是很好,很容易,只是试图find一个注销buttongraphics吧!

Sumitbuild议的移动解决scheme完美适用于AS3 Air:

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

对于想要直接从后端login用户的Python开发人员

目前我正在写这个, m.facebook.com的技巧不再起作用(至less对我来说),用户被redirect到移动的FBlogin页面,这对于UX来说显然是不好的。

幸运的是,FB PHP SDK有一个半logging的解决scheme (如果链接不会导致getLogoutUrl()函数,只需在该页面上进行search查找)。 在StackOverflow中至less还有一个提到这个问题 : Facebook的PHP SDK的getLogoutUrl()问题 。

顺便说一句,我刚刚注意到, Zach Greenberg在这个问题上是正确的 ,但是我将我的答案作为Python开发人员的总结。

Christoph的回答: Facebook Oauth注销注销function需要指定一个callback函数,如果没有它,至less在Firefox上会失败。 Chrome在没有callback的情况下工作。

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

@Christoph:只是增加一些。 我不这么认为,这是一个正确的方法。在两个地方同时<a href="/logout" onclick="FB.logout();">Logout</a> 。( <a href="/logout" onclick="FB.logout();">Logout</a> )。

 Just add id to the anchor tag . <a id='fbLogOut' href="/logout" onclick="FB.logout();">Logout</a> $(document).ready(function(){ $('#fbLogOut').click(function(e){ e.preventDefault(); FB.logout(function(response) { // user is now logged out var url = $(this).attr('href'); window.location= url; }); });}); 

Update:这个解决scheme可以正常工作,只是调用'FB.logout()'不起作用,因为浏览器需要用户交互来实际调用这个函数,以便它知道这是一个用户而不是脚本。

 <a href="#" onclick="FB.logout();">Logout</a> 

只需input:$ facebook-> setSession(null); 注销