錯誤可能會出現在不同層。視錯誤發生的位置而定,您可能會看到不同形式的通知。
缺少必要的 OAuth 參數
如果您忘記設定必要的 OAuth 參數,例如 client_id 或 scope,就會在瀏覽器的 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 要求。
- 對於含
prompt=none
參數的 OAuth 要求,使用者尚未通過驗證,且未針對所要求的範圍預先設定同意聲明。
以下範例將說明如何處理成功和錯誤 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
});