Facebook:OAuthException:此授权代码已被使用


Facebook: OAuthException: This authorization code has been used

背景:

我知道这个问题以前有人问过,我已经把我找到的所有答案都看了一遍,但似乎还没有人给出一个令人满意的答案。我看到脸书对此有一个漏洞,但由于缺乏信息而关闭了它。这就是为什么我再次询问,看看现在是否有人找到了任何好的解决方案。

我正在尝试获得一个短暂的访问令牌,以便能够获得用户配置文件。直到一段时间前,这还很好,现在我只从api调用中得到"OAuthException:This authorization code has been used."。

使用的技术:

  • PHP(没有用于Facebook API交互的第三部分库或Facebook SDK)
  • cURL
  • 图形API
  • https

逻辑流

  1. 获取登录对话框的url,如下所示:

    https://graph.facebook.com/oauth/authorize?client_id=[APP_ID]&redirect_uri=[URLENCODED_redirect_uri]&display=popup&scope=publish_stream

  2. 通过Facebook登录对话框登录。成功重定向时将用户添加到指定的回调URI,并添加"代码"quersy字符串变量。

  3. 当用户重定向到指定的回调URI时立即尝试获取一个带有"code"的短命accesstoken由Facebook登录对话框提供的变量。我是通过调用此url:

    https://graph.facebook.com/oauth/access_token?client_id=[APP_ID]&redirect_uri=[URLENCODED_redirect_uri]&client_secret=[APP_secret]&code=[code_SENT_FROM_FACEBOOK]

我每次都会收到以下回复:{"错误":{"消息":"此授权码已过期。","类型":"OAuthException","代码":100}}

我已经知道:

  1. 我将获得一个短暂的访问令牌
  2. 该代码仅在10分钟内有效
  3. 我只能使用该代码一次(我的日志记录确认我只调用只有一次access_token请求)

我错过了什么?为什么它突然停止工作了?任何答案、提示或技巧都将不胜感激!提前谢谢。

如果我理解。

每次你登录facebook时,这个令牌都会更改。

你需要获得一个新的令牌,每次你都要进行新的登录。