错误可能发生在不同的层。根据错误发生的位置,您可能会以不同的方式收到通知。
缺少必需的 OAuth 参数
如果您忘记设置必需的 OAuth 参数(例如 client_id 或作用域),则会在浏览器的 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
});