使用access_token的Logout.php不再工作了


logout.php with access_token doesn't work any more

我们在几个月前设置了Facebook集成,直到本周登出停止工作,一切都很好。

我们使用

:

    用于识别用户的JS sdk
  • 从php直接调用API(使用file_get_contents)对于大多数事情

对于注销,我们将用户从应用程序中注销(包括删除cookie),然后使用javascript重定向到此url:

"https://www.facebook.com/logout.php?access_token=". $FB_ACCESS_TOKEN . "&next=" . urlencode($loginUrl)

用于将用户从facebook注销,然后将他们带到我们的登录页面。

现在它让他们登录,并把他们带到

https://www.facebook.com/home.php

这是facebook的bug,还是我使用了一个从未打算为应用程序使用的功能?我猜我可以使用javascript API来获得这个工作,只是想检查是否有一些小的改变,我应该做我目前的方式,而不是。

编辑:

另一个想法(如果有人知道)是,也许有一个改变的方式权限的工作,我意味着请求一个额外的权限,当用户登录?现在我只要求:

email,publish_actions

如果注销url带您到https://www.facebook.com/home.php,这意味着访问令牌或下一个url配置不正确。

尝试将下一个url设置为下一个页面(例如www.yourapp.com/logout.php),然后从那里重定向到您的应用程序

来自Facebook使用Javascript注销的SDK文档:

FB.logout(function(response) {
  // user is now logged out
})

FB.logout将使用户退出您的站点和Facebook。

我建议使用回调来重定向用户,而不是直接链接到facebook.com/logout.php

结果是我的access_token无效。我将它存储在一个varchar(150)字段中,但是新的令牌现在比它长。

因此,令牌在登录页面上使用时是正确的,但随后在后来的页面(如注销)上,它从数据库中检索并被截断,因此它无法再被Facebook解密。

作为参考,对于其他人来说,它看起来没有最小长度- 255目前可以工作,400会更安全,但oauth规范允许任何长度,所以需要一个smalltext字段是完全安全的。

这也发生在我身上,我终于意识到这是因为我改变了网站的位置。我确实更新了OAuth重定向URL到新的地方,但忘记在基本设置中更改网站地址....

  1. 进入facebook应用控制台
  2. 转到设置->基本。在Site URL中输入my new URL

和注销url又工作了!

您需要在Facebook应用程序设置中有您要重定向到的页面的域名

设置->基本->应用程序域

但是这些域有规则…

应用域名必须与Facebook网页游戏URL (https)、手机网站URL、Unity二进制URL、网站URL或安全页面标签URL的域名相匹配。

如果你想有2个不同的URL,那么你可以同时使用"站点URL"answers"安全页面选项卡URL"

设置->基本->网站->网站URL

设置->基本->页面选项卡->安全页面选项卡URL