處理錯誤

錯誤可能會出現在不同層。視錯誤發生的位置而定,您可能會看到不同形式的通知。

缺少必要的 OAuth 參數

如果您忘記設定必要的 OAuth 參數,例如 client_id 或 scope,就會在瀏覽器的 JavaScript 控制台中看到如下所示的錯誤訊息。

JavaScript 控制台錯誤

修正 OAuth 設定錯誤

您可能需要在 Google API 控制台中進行變更,才能解決部分錯誤。

OAuth 參數值無效

如果將無效的值設為 OAuth 參數,例如無效的用戶端 ID、範圍 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
});