錯誤可能發生在不同的圖層。您可能會透過不同方式接收通知,具體取決於錯誤發生的位置。
缺少必要的 OAuth 參數
如果您忘記設定必要的 OAuth 參數 (例如 client_id 或範圍),瀏覽器的 JavaScript 主控台就會顯示下列錯誤訊息。
修正 OAuth 設定錯誤
您可能需要在 Google API 控制台中進行變更,才能解決某些錯誤。
- 建立用戶端 ID (如果尚未建立)。
- 針對彈出式視窗使用者體驗,請將所有可能觸發目前流程的網域新增至
Authorized JavaScript origins
。 - 針對重新導向使用者體驗,請將所有可能收到授權回應的網址新增至
Authorized redirect URIs
。 - 正確設定 OAuth 同意畫面。
- 視需要將應用程式送交驗證。
- 您可能需要採取額外步驟,才能遵守 Google 的 OAuth 2.0 政策。
OAuth 參數值無效
如果您將無效值設為 OAuth 參數 (例如無效的用戶端 ID、範圍 ID 或回應類型值),就會看到 OAuth 錯誤頁面。
OAuth 錯誤回應
OAuth 可能會傳回錯誤回應,在這種情況下,系統會觸發 callback
函式,並將錯誤回應做為參數。以下是 OAuth 錯誤回應範例。
{ "error":"access_denied" }
以下列舉幾個範例。
- 使用者拒絕 OAuth 要求。
- 如果 OAuth 要求含有
prompt=none
參數,表示使用者尚未通過驗證,且尚未預先設定所要求的範圍同意聲明。
以下範例說明如何處理成功和錯誤的 OAuth 回應。
function myCallback(response) {
if (response.error) {
// Handle error response
... ...
} else if (response.code) {
// Handle success code response
... ...
}
}
非 OAuth 錯誤
OAuth 不會在下列情況下定義行為:
- 彈出式視窗無法開啟。
- 在傳回 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
});