【问题标题】:Reliability of Facebook Graph error messagesFacebook Graph 错误消息的可靠性
【发布时间】:2011-12-23 09:23:28
【问题描述】:

是否有可靠的方法从 facebook 平台获取访问令牌错误?

我们的 iOS/Android 应用需要保存用户的 Facebook 会话。这很好,只是我们从 Facebook 获得的身份验证错误似乎不一致。

基本上,如果我们从 facebook 收到错误,我们想知道这是否需要用户重新进行身份验证,或者是由于间歇性错误(即由于某种原因而受到速率限制)。

大多数 facebook 图表错误似乎都在错误消息文本的正文中包含错误代码。

有些没有。

例如

{"error":{"message":"验证访问令牌时出错:会话无效,因为用户已注销。","type":"OAuthException"}}

不包含错误代码,因此检查此错误的唯一方法是对“消息”进行字符串比较。这似乎是一种非常不可靠的错误检查方式。

似乎〜几乎〜可以检查json字符串中的“type”变量是否指示“OAuthException”,除非用户受到速率限制,那么这也会抛出OAuthException,但它不会不需要用户重新登录,只需要他们稍等片刻,然后停止发帖。

我已经看到这里列出的操作方法:https://developers.facebook.com/blog/post/500,但这仍然存在问题,如果用户碰巧过于热衷于在他们的墙上发帖,我的游戏将要求他们重新登录 Facebook。

那么,有没有可靠的方法从 facebook 平台获取错误?

目前我能找到的最佳解决方案是解析消息字符串中的错误代码,如果我没有找到任何错误代码,则重新解析字符串以查找特定消息(例如“验证访问令牌时出错”),然后最后如果我无法确定错误是什么,只需 panic 并注销用户。

【问题讨论】:

  • 现在我要保守一点。我假设任何 OAuthException 都需要用户注销,除非我可以确认异常不需要这样做。基本上,这意味着测试我所知道的“安全”异常并向用户提供反馈。这仍然意味着用户可能会收到很多“抱歉,您必须重新登录”。
  • 对于任何感兴趣的人,这里是常见错误响应的简短列表:"Session has expired at unix time SOME_TIME. The current unix time is SOME_TIME."The session has been invalidated because the user has changed the password.""Error validating access token: USER_ID has not authorized application APP_ID""Error validating access token: The session is invalid because the user logged out.""An active access token must be used to query information about the current user"
  • 最后你可以测试一下错误信息是否包含字符串(#341)来测试用户是否被速率限制。如果他们受到速率限制,他们不需要重新认证(似乎),但只需要一些反馈,他们应该停止发布这么多。
  • HTTP 响应代码有帮助吗?
  • 嗯,很好,我没有尝试拦截 HTTP 响应代码。它们被 Android SDK 包裹起来并隐藏起来,但我应该能够对其进行修补,以便响应也将通过 HTTP 响应发送。我现在将对此进行调查,看看是否能提供更多信息,谢谢您的提示。

标签: android ios facebook graph access-token


【解决方案1】:

不幸的是,我还没有找到处理这个问题的好方法。到目前为止,我发现的最佳解决方案是查看错误是否为 OAuthException,将错误消息与不需要重新身份验证的“可接受失败”白名单进行比较,但如果错误与任何错误不匹配这个白名单,我假设用户必须用 Facebook 重新认证。

作为参考,我发现的唯一可以列入白名单的错误是“用户受速率限制”错误。为了检测到这一点,我检查错误消息是否包含子字符串“(#341)”,这是该错误的错误代码(并不是说此错误是错误消息中包含错误代码的少数错误之一身体)。

【讨论】:

  • “user is rate limited”错误可以忽略,因为它不需要用户重新认证,它只需要用户稍等片刻,停止发帖太多。在我看来,处理此错误的“正确”方法是向用户提供反馈,说明他们发布得太快,稍后再试,然后忽略该错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多