访问口令:调试和错误处理

获取有关口令与调试的信息

在使用访问口令时,您可能需要检查与之相关的信息,如该口令的用户或有效期。如要获取此类信息,您可使用我们的调试工具,或使用 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 应用中的口令错误

iOS SDK 中的 API 错误通常会在传递至回调的 NSError 实例中出现。请参阅 iOS SDK 错误文档,以了解更多详情。

处理 Android 应用中的口令错误

Android SDK 中的 API 错误通常会在传递至 Requests 回调的 Response 对象中出现。具体而言,您可通过调用 response.getError() 来获取 FacebookRequestError 实例。

详细了解

您可查阅 API 错误参考文档以了解更多错误,但以上这三个错误是处理访问口令时最常见的错误。