【问题标题】:Facebook access tokens expiring for unknown reasonFacebook 访问令牌因未知原因过期
【发布时间】:2012-05-07 18:14:54
【问题描述】:

来自@avs099 的编辑:我开始在这篇文章中提供赏金,因为我遇到了完全相同的问题。我把问题总结在这里,把帖子本身不做任何改动留在底部以供参考。


我们所拥有的: Facebook 页面访问令牌,按此处所述获得:Authenticating as a Page,并且通过新的fb_exchange_token 请求将其有效期延长至 60 天。

问题是什么:这个令牌工作了一段时间 - 有时我可以在几天内将数百张照片发布到我的粉丝页面;有时它实际上是几张照片 - 然后我开始得到任何一张

(OAuthException) 使访问令牌无效时出错:会话已被 由于用户更改了密码而失效。

(OAuthException) 使访问令牌无效的错误:会话没有 匹配当前存储的会话。这可能是因为用户更改了 自会话创建或 Facebook 拥有的密码 出于安全原因更改了会话。

来自 Facebook 的例外情况 - 但我当然没有更改密码或取消对应用的授权。

其他信息:不确定是否重要,但:

  1. 有时我从 Facebook 请求令牌几天后就开始使用它
  2. (由 C# 后端)从服务器请求令牌 它位于与桌面不同的地理区域 将照片发布到粉丝页面的应用。
  3. 有时有几个不同的桌面应用程序会发布来自不同 PC 的照片(即我猜是不同的 IP)

任何人都知道发生了什么以及如何解决这个问题?

谢谢。


我有一个 facebook 应用程序,它有两个用途:

1) 允许用户通过 facebook 连接到我的网站 2) 允许我的网站发布到我的网站 facebook 粉丝页面墙

我关心的是第二种用法。我曾经能够在粉丝页面上设置应用程序的权限,只允许发布(通过 php sdk),而不用担心访问令牌。现在我创建了一些新的粉丝页面,并且该功能似乎已被删除。好的,所以我完成了为用户(总是我或我的 facebook 粉丝页面的其他管理员)获取访问令牌(成功)的整个过程,并使用该令牌来获取我管理的粉丝页面的访问令牌(我有manage_pages 权限以及我要发布到的页面的其他管理员)。但是,由于引擎开始将内容发布到我的粉丝页面,令牌已过期并出现以下两条错误消息之一:

使访问令牌无效时出错:会话与当前存储的会话不匹配。这可能是因为用户在创建会话后更改了密码,或者 Facebook 出于安全原因更改了会话。

OAuthException: Error invalidating access token: 由于用户更改了密码,会话已失效。

但这不是依赖于外部用户的访问令牌,只依赖于内部人员(我和另一个人现在)。我们不会更改密码或做任何事情。我什至在获得令牌后通过注销 Facebook 对其进行了测试,并且效果很好。过了一会儿,它们无缘无故过期,我无法确定。当我得到令牌时,我可以在调试工具上检查它们,它们应该持续 60 天(根据文档),尽管该工具说它们永不过期。

我已经设置了系统,因此当它无法发布到页面时,我会收到一封电子邮件,其中包含指向我的站点的链接以更新令牌。

有人知道发生了什么吗?

【问题讨论】:

  • 是否有任何用户被 Facebook 安全锁定?这以与更改密码相同的方式循环令牌
  • 嗯...“安全锁定”到底是什么?如果我输入错误的密码 - 会这样吗?我不记得有任何不寻常的活动——所以很可能答案是“不”。如果我给你过期的令牌 - 你能追踪它的历史并找出它被取消的原因吗?
  • 我一直无法完全解决这个问题,但它似乎至少已经平息了。如果令牌过期并带有指向生成新令牌并将它们保存在数据库中的页面的链接,我将服务器设置为向我发送电子邮件。不过,这些令牌至少在一周内还没有神秘地过期。
  • @Igy - 很抱歉打扰您,但有没有办法让您查看访问令牌并跟踪其历史记录并让我知道它为什么已过期?谢谢!
  • 我在我的一个应用程序中遇到了同样的问题,并且一开始找不到解决方法。最大的问题是 Facebook 的错误消息,它多次没有解释实际原因。例如,当实际错误是令牌已过期时,我收到“OAuthException:使访问令牌无效:会话已无效,因为用户更改了密码”错误。我对此的解决方案是首先通过尝试 graphQuery 'graph.facebook.com/me?access_token=token...' 来检查令牌。如果失败,我使用 fb_exchange_token 查询扩展令牌。

标签: facebook facebook-graph-api


【解决方案1】:

正如 Mikhail 所指出的,如果您收到错误报告,表明令牌无效,因为用户更改了密码。当您已经有一个有效的令牌时,您很可能正在代码中隐藏的某个地方请求一个新令牌。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 感谢您的链接,但我不这么认为...我确定令牌的有效期超过 2 小时。问题是为什么它们突然过期 - 是什么原因造成的......
    【解决方案3】:

    我的应用也有同样的问题 - 有时令牌会过期。

    查找原因之一:有时我的应用程序在旧令牌有效时要求新令牌,而 FB 返回错误,或者由于某种原因我无法保存新令牌。 在旧令牌过期后 - 对用户应用程序可能只有一个令牌有效。

    【讨论】:

      【解决方案4】:

      您可以获取未经授权的令牌,以便请求新的令牌(或任何您喜欢的)。

      我可以提供一个很好的解释,但您可以在这里阅读全部内容: https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/

      【讨论】:

      • 问题是“为什么令牌过期”,而不是“如何处理”
      【解决方案5】:

      临时解决方案是要求用户从其配置文件中删除该应用程序,然后再次允许它。

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题并解决了“将应用程序重新安装到用户的 Facebook 应用程序”。如果没有任何问题的答案,它可能会对您有所帮助。

        这样做:

        1. 面临问题的facebook用户转到其facebook页面
        2. 他/她将您的应用从他/她的应用列表中删除。
        3. 在 android 上重新尝试通过 facebook sdk 登录。

        【讨论】:

          猜你喜欢
          • 2012-12-06
          • 2016-04-22
          • 2016-02-02
          • 1970-01-01
          • 2013-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-12
          相关资源
          最近更新 更多