无法在Facebook JS SDK中授权用户:"此授权代码已被使用." 或者如何获得新的授权令牌?

won*_*lik 7 facebook facebook-graph-api facebook-authentication facebook-login

我正在尝试使用Facebook来验证用户身份.除了Ajax调用之外它工作正常.大多数时候它只发送旧令牌,我得到:

{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
Run Code Online (Sandbox Code Playgroud)

所以我尝试做的是用每个ajax调用

FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            return  fn();
            ...
Run Code Online (Sandbox Code Playgroud)

这没用,所以我添加了: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);
Run Code Online (Sandbox Code Playgroud)

大!除非它非常缓慢.难道我做错了什么?我可以在每次操作后获得新的令牌,所以我不需要在下一次之前等待吗?

谢谢你

dac*_*gen 16

这是Facebook所说的:

"对OAuth授权码的新安全限制.我们只允许一次授权代码交换访问令牌,并要求在创建后的10分钟内将其交换为访问令牌.这符合OAuth 2.0规范从一开始就说"授权代码必须是短期和单次使用".有关更多信息,请查看我们的身份验证文档.

解决这个问题的方法是使用扩展访问令牌api:

https://developers.facebook.com/docs/howtos/login/extending-tokens/

  • 我的答案现在已经 4 岁了 :P (2认同)