【问题标题】:Can not authorise user in Facebook JS SDK : "This authorization code has been used." or how to get new authorisation token?无法在 Facebook JS SDK 中授权用户:“此授权码已被使用。”或者如何获得新的授权令牌?
【发布时间】:2013-04-25 20:28:35
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: facebook facebook-graph-api facebook-login facebook-authentication


    【解决方案1】:

    Facebook 是这样说的:

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

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

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

    【讨论】:

    • 我明白这一点。但是有没有自动获取新代码的选项?如果我需要在每次调用之前获取新令牌,这不会使 JS SDK 无法用于频繁的 ajax 调用吗?除了在服务器端创建用户并将其放入会话之外,还有其他解决方案吗?
    • 啊,是的 : ) - 你必须扩展你的访问令牌developers.facebook.com/docs/howtos/login/extending-tokens
    • 你能链接到facebook答案的来源吗?
    • 我的答案现在已经 4 岁了:P
    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 2016-03-05
    • 2014-01-06
    • 2016-06-21
    • 2016-06-22
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多