处理错误

错误可能发生在不同的层。根据错误发生的位置,您可能会以不同的方式收到通知。

缺少必需的 OAuth 参数

如果您忘记设置必需的 OAuth 参数(例如 client_id 或作用域),则会在浏览器的 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
});