错误可能会出现在不同的层中。您可能会通过不同的方式收到通知,具体取决于错误发生的位置。
缺少必需的 OAuth 参数
如果您忘记设置必需的 OAuth 参数(例如 client_id 或 scope),则会在浏览器的 JavaScript 控制台中看到如下所示的错误消息。
修复 OAuth 配置错误
您可能需要在 Google API 控制台中进行更改,才能解决某些错误。
- 创建客户端 ID(如果尚未创建)。
- 对于弹出式窗口体验,请将所有可能触发当前流程的网域添加到
Authorized JavaScript origins
。 - 对于重定向用户体验,请将所有可能接收授权响应的网址添加到
Authorized redirect URIs
。 - 正确配置 OAuth 同意屏幕。
- 如有需要,提交应用以供验证。
- 您可能需要执行额外步骤才能遵守 Google 的 OAuth 2.0 政策。
OAuth 参数值无效
如果您为 OAuth 参数设置无效值(例如无效的客户端 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
});