我们在几个月前设置了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到新的地方,但忘记在基本设置中更改网站地址....
- 进入facebook应用控制台
- 转到设置->基本。在Site URL中输入my new URL
和注销url又工作了!
您需要在Facebook应用程序设置中有您要重定向到的页面的域名
设置->基本->应用程序域
但是这些域有规则…
应用域名必须与Facebook网页游戏URL (https)、手机网站URL、Unity二进制URL、网站URL或安全页面标签URL的域名相匹配。
如果你想有2个不同的URL,那么你可以同时使用"站点URL"answers"安全页面选项卡URL"
设置->基本->网站->网站URL
设置->基本->页面选项卡->安全页面选项卡URL