我正在尝试使用Facebook来验证用户身份。除了Ajax调用之外它工作正常。大多数时候它只发送旧令牌,我得到:
{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
所以我尝试做的是用
包装每个ajax调用FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
return fn();
...
这没用,所以我添加了:true作为getLoginStatus的参数以防止缓存:
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
console.log('connected');
fn();
} else if (response.status === 'not_authorized') {
console.log('not_authorized);
} else {
console.log('not_logged_in');
}
},true);
大!除非它非常缓慢。难道我做错了什么?我可以在每次动作后获得新的令牌,所以我不需要在下一次之前等待吗?
由于 w ^
答案 0 :(得分:16)
这就是Facebook所说的:
“OAuth授权码的新安全限制。 我们只允许一次授权代码交换访问令牌,并要求在创建后的10分钟内将其交换为访问令牌。这与OAuth 2.0规范一致,从一开始就说“授权代码必须是短暂的并且一次性使用”。有关更多信息,请查看我们的身份验证文档。
解决这个问题的方法是使用扩展访问令牌api:
https://developers.facebook.com/docs/howtos/login/extending-tokens/