【问题标题】:Can't Logout of my Facebook OAuth Session without logging User Out of Facebook如果不将用户从 Facebook 注销,就无法注销我的 Facebook OAuth 会话
【发布时间】:2012-02-08 08:05:35
【问题描述】:

根据 SDK,我将 logout.php 与重定向一起使用:

https://www.facebook.com/logout.php?confirm=1&next={SOME URL}&access_token={ACCESSTOKEN}

它可以让我退出,但它也会让用户退出 facebook。有没有办法在不退出 facebook 的情况下退出我的 OAuth 会话?

【问题讨论】:

    标签: facebook oauth


    【解决方案1】:

    这是在 Facebook 平台上开发的许多烦人的事情之一。通过浏览器会话注销的唯一方法是使用他们的 javascript 注销功能或您尝试过的重定向,但两者都会将用户从 Facebook 注销,这从用户的角度来看非常烦人。问题是由于跨域限制,您无法访问他们为您的应用设置的 cookie 以将其删除,因此您只能使用 Facebook 提供的有限选项。如果您没有提示离线访问,您可能只是忘记了用户访问令牌,它会在一小时后过期。虽然问题仍然存在,cookie 仍然设置在那个小时内。

    【讨论】:

      【解决方案2】:

      是的,我自己也遇到了同样的问题。不要做 logout.php 或 JS SDK 的 FB.logout()。而是使用 HTTP Delete 命令调用 Graph API 到 me/permissions。这将杀死访问令牌,从用户的应用程序列表中删除该应用程序并维护其浏览器的 Facebook cookie。您可以将其称为服务器端或客户端。这是客户端Javascript SDK方式:

      FB.api("me/permissions","delete", function(response){/*do something if you want*/})
      

      【讨论】:

      • 但我不希望它从他们的 Facebook 中删除我的应用程序,只需将它们从我的网络应用程序中注销即可。
      • 然后不要调用任何 facebook 方法,只需调用 Session.End() (php.net/manual/en/function.session-destroy.php)or 删除您的站点 auth cookie。
      • @DMCS 我也有同样的问题。如果我扔掉服务器端访问令牌,并且用户有多个帐户,并且他使用我的应用程序再次启动 oauth 流程,是否会提示他?我担心 Facebook 会立即为刚刚退出我的应用程序的用户退还我未过期的访问令牌,而不会提示选择其他用户。
      • 如果您在提示用户进行任何身份验证对话框之前执行删除命令,它不会将他们从 facebook 中注销,只是将您的应用从他们的列表中删除,因此他们必须重新进行身份验证。跨度>
      猜你喜欢
      • 2011-02-15
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2012-05-10
      • 2011-12-03
      • 1970-01-01
      相关资源
      最近更新 更多