【发布时间】:2011-02-15 09:43:51
【问题描述】:
我有一个使用 Oauth 2 与 Facebook 集成的应用程序。
我可以使用 FB 进行授权并完美地查询他们的 REST 和 Graph API,但是当我授权时,会使用 FB 创建一个活动的浏览器会话。然后我可以很好地退出我的应用程序,但与 FB 的会话仍然存在,因此如果其他人使用浏览器,他们将看到以前的用户 FB 帐户(除非以前的用户也手动退出 FB)。
我授权的步骤是:
- 致电 [链接:graph.facebook.com/oauth/authorize?client_id...]
如果用户的浏览器还没有活动的 FB 会话,此步骤将打开 Facebook 登录/连接窗口。一旦他们登录到 Facebook,他们就会使用我可以交换 oauth 令牌的代码重定向到我的网站。
- 使用 (1) 中的代码调用 [LINK: graph.facebook.com/oauth/access_token?client_id..]
现在我有一个 Oauth 令牌,并且用户的浏览器登录到我的网站和 FB。
- 我调用一堆 API 来做事:即 [LINK: graph.facebook.com/me?access_token=..]
假设我的用户想要退出我的网站。 FB 条款和条件要求我执行单点注销,因此当用户退出我的站点时,他们也会退出 Facebook。有人认为这有点愚蠢,但如果有任何实际实现的方法,我很乐意遵守。
我看到了以下建议:
A.我使用 Javascript API 注销:FB.Connect.logout()。好吧,我尝试使用它,但它不起作用,而且我不确定它到底是怎么做到的,因为我没有在我的网站上以任何方式使用 Javascript API。该会话不是由 Javascript API 维护或创建的,所以我也不确定它应该如何过期。
B.使用 [链接:facebook.com/logout.php]。这是前段时间 Facebook 论坛中的管理员建议的。给出的示例与获取 FB 会话(非 oauth)的旧方式有关,因此我认为我不能在我的情况下应用它。
C.使用旧的 REST api expireSession 或 revokeAuthorization。我尝试了这两种方法,虽然它们确实使 Oauth 令牌过期,但它们不会使浏览器当前正在使用的会话无效,因此它没有效果,用户没有从 Facebook 注销。
我真的有点不知所措,Facebook 文档不完整、模棱两可而且很差。论坛上的支持是不存在的,目前我什至无法登录 facebook 论坛,除此之外,他们自己的 FB Connect 集成甚至在论坛本身上都不起作用。不会激发太多信心。
Ta 可以提供任何帮助。 德里克
ps。不得不将 HTTPS 更改为 LINK,没有足够的业力来发布链接,这可能足够公平。
【问题讨论】:
-
肖恩有一个观点,你应该听一听,因为他的名声比你高,这说明他是对的。如果我登录了 Facebook,然后我会来到你的网站,使用它(或者可能只是决定以极度失望的方式离开),然后退出,如果我发现我会感到惊讶甚至有点愤怒也已退出 Facebook。如果用户界面清楚地表明会发生这种情况,那很好,但如果它只是页面右上角的一个按钮,上面写着“注销”,也许附近漂浮着一个 facebook 徽标,那是相当令人惊讶的。惊喜不是好的用户界面的特征。
-
@Tom: developers.facebook.com/policy 第 6 行。
-
@DigitalPrecision:一个很好的链接,它表明即使是 Facebook 也无法做到这一点。
-
同意。我们不得不跳过箍让它在我们的应用程序中工作。文档很糟糕。
-
我遇到了完全相反的问题:退出我的自制应用程序时,我也立即退出了 facebook。