9

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

{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}

所以我尝试做的是用

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);

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

谢谢

4

1 回答 1

18

以下是 Facebook 所说的:

“OAuth 授权代码的新安全限制。我们将只允许将授权代码交换为访问令牌一次,并要求在创建后 10 分钟内将它们交换为访问令牌。这符合 OAuth 2.0 规范,其中从一开始就声明“授权码必须是短命且一次性的”。有关更多信息,请查看我们的身份验证文档。

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

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

于 2013-04-25T20:34:39.093 回答