我正试图退出我用Facebook集成创建的网站.登录工作正常,但是当我想要注销时,Firebug一直给我这个错误:
FB.logout() 没有访问令牌调用.
我正在使用Facebook JavaScript SDK,我必须注销的代码如下所示:
$(document).ready($(function () {
$("#fblogout").click(facebooklogout);
}));
function facebooklogout() {
FB.logout(function (response) {
}
)};
Run Code Online (Sandbox Code Playgroud)
这是在Facebook开发人员文档中指定的注销代码,只是在document.ready上分配了一个按钮
在此代码之前我有FB.init()方法,一切运行正常.
如果有人知道为什么FB.logout没有访问令牌,那么我们将不胜感激.
看起来我并不是唯一一个试图完全避免使用OAuth 2.0服务器端的解决方案的人.人们可以做任何事情,但他们无法注销:
Facebook OAuth2 Logout不会删除fb_ cookie
OAuth 2.0与Facebook 的官方文档说:
您可以通过将用户指向以下URL来将用户从Facebook会话中注销:
https://www.facebook.com/logout.php?next=YOUR_URL&access_token=ACCESS_TOKEN
YOUR_URL必须是您的站点域中的URL,如Developer App中所定义.
我想做所有服务器端,我发现建议的链接方式离开cookie,以便注销链接不起作用:
https://www.facebook.com/logout.php?next=http://{{host}}&access_token={{current_user.access_token}}
它确实重定向,但它不会将用户从我的网站中注销.它似乎是一个Heisenbug,因为这改变了我,并没有太多的文件.无论如何我似乎能够通过操纵cookie的处理程序来实现功能,这样实际上用户就会被注销:
class LogoutHandler(webapp2.RequestHandler):
def get(self):
current_user = main.get_user_from_cookie(self.request.cookies, facebookconf.FACEBOOK_APP_ID, facebookconf.FACEBOOK_APP_SECRET)
if current_user:
graph = main.GraphAPI(current_user["access_token"])
profile = graph.get_object("me")
accessed_token = current_user["access_token"]
self.set_cookie("fbsr_" + facebookconf.FACEBOOK_APP_ID, None, expires=time.time() - 86400)
self.redirect("https://www.facebook.com/logout.php?next=http://%s&access_token=%s" get_host(), accessed_token)
def set_cookie(self, name, value, expires=None):
if value is None:
value = 'deleted'
expires = datetime.timedelta(minutes=-50000)
jar = Cookie.SimpleCookie()
jar[name] = value
jar[name]['path'] = '/'
if expires:
if isinstance(expires, datetime.timedelta): …Run Code Online (Sandbox Code Playgroud) python google-app-engine facebook facebook-graph-api facebook-oauth