【发布时间】: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