处理错误

错误可能会出现在不同的层中。您可能会通过不同的方式收到通知,具体取决于错误发生的位置。

缺少必需的 OAuth 参数

如果您忘记设置必需的 OAuth 参数(例如 client_id 或 scope),则会在浏览器的 JavaScript 控制台中看到如下所示的错误消息。

JavaScript 控制台错误

修复 OAuth 配置错误

您可能需要在 Google API 控制台中进行更改,才能解决某些错误。

OAuth 参数值无效

如果您为 OAuth 参数设置无效值(例如无效的客户端 ID、范围标识符或响应类型值),则会看到 OAuth 错误页面。

OAuth 错误

OAuth 错误响应

OAuth 可能会返回错误响应,在这种情况下,系统会触发您的 callback 函数,并将错误响应作为参数。以下是 OAuth 错误响应的示例。

  {
    "error":"access_denied"
  }

下面列出了一些示例。

  1. 用户拒绝 OAuth 请求。
  2. 对于包含 prompt=none 参数的 OAuth 请求,用户尚未经过身份验证,并且未预先配置对请求的作用域的同意。

以下示例展示了如何处理成功和错误 OAuth 响应。

function myCallback(response) {
  if (response.error) {
    // Handle error response
    ... ...
  } else if (response.code) {
    // Handle success code response
    ... ...
  }
}

非 OAuth 错误

OAuth 未定义以下情况的行为:

  1. 弹出式窗口无法打开。
  2. 在返回 OAuth 响应之前,弹出式窗口已关闭。

此库会捕获这些错误,并触发 error_callback(如果已设置)。请务必检查错误类型,如下所示。否则,当此库日后支持新错误类型时,您的代码逻辑可能会受到影响。

function myErrorCallback(err) {
  if (err.type == 'popup_failed_to_open') {
    // The popup window is failed to open
    ... ...
  } else if (err.type == 'popup_closed') {
    // The popup window is closed before an OAuth response is returned
    ... ...
  }
}

const client = google.accounts.oauth2.initCodeClient({
  client_id: 'YOUR_GOOGLE_CLIENT_ID',
  scope: 'https://www.googleapis.com/auth/calendar.readonly',
  ux_mode: 'popup',
  callback: myCallback,
  error_callback: myErrorCallback
});