在使用访问口令时,您可能需要检查与之相关的信息,如该口令的用户或有效期。如要获取此类信息,您可使用我们的调试工具,或使用 API 端点。
如要使用 API,您可发出图谱 API 请求:
curl -i -X GET "https://graph.facebook.com/debug_token? input_token={input-token}& access_token={valid-access-token}
使用您想获取与之相关信息的访问口令替换 {input-token}
,并使用有效访问口令来替换 {access-token}
。这些口令必须来自于相同的应用。
API 调用的响应为 JSON 数组,如下所示:
{ "data":{ "app_id":"{app-id}", "type":"USER", "application":"{app-name}", "data_access_expires_at":1576687825, "expires_at":1570820400, "is_valid":true, "scopes":[ "pages_show_list", "public_profile" ], "granular_scopes":[ { "scope":"pages_show_list", "target_ids":[ "{page-1-app-can-access-id}", "{page-2-app-can-access-id}" ] } ], "user_id":"10215241773831025" } }
如果是长期访问口令,则系统也会返回 issued_at
字段。
Facebook 不会通知您访问口令已失效。除非您已将 expiry
时间和访问令牌一并发送给您的应用,否则您的应用可能仅会在您尝试向 API 发出请求时才知道给定的令牌已失效。
为了安全起见,访问口令或会在预计到期时间前失效。
在大多数应用中,处理过期口令的最佳方式捕获 API 抛出的错误消息。在各种情况下,API 均会返回错误消息、代码和用于解释错误性质的 JSON 正文子代码。如需了解有关代码与子代码的更多信息,请参阅错误代码参考文档。
{ "error": { "message": "Error validating access token: Session has expired on Wednesday, 14-Feb-18 18:00:00 PST. The current time is Thursday, 15-Feb-18 13:46:35 PST.", "type": "OAuthException", "code": 190, "error_subcode": 463, "fbtrace_id": "H2il2t5bn4e" } }
当用户退出应用程序或更改密码时,系统便会发出此响应。
{ "error": { "message": "Error validating access token: The session is invalid because the user logged out.", "type": "OAuthException", "code": 190, "error_subcode": 460, "fbtrace_id": "H2il2t5bn4e" } }
用户需要再次登录才能获取访问口令,以便您代表他们执行 API 调用。采用哪种方法应取决于应用为新用户提供的登录流程。
当有人撤销授权,或从未向您的应用授权时,错误响应会与应用新用户的响应相同。
{ "error": { "message": "Error validating access token: User {user-id} has not authorized application {your-app-id}.", "type": "OAuthException", "code": 190, "error_subcode": 458, "fbtrace_id": "H2il2t5bn4e" } } }
iOS SDK 中的 API 错误通常会在传递至回调的 NSError
实例中出现。请参阅 iOS SDK 错误文档,以了解更多详情。
Android SDK 中的 API 错误通常会在传递至 Requests
回调的 Response
对象中出现。具体而言,您可通过调用 response.getError()
来获取 FacebookRequestError
实例。
您可查阅 API 错误参考文档以了解更多错误,但以上这三个错误是处理访问口令时最常见的错误。