Google 日历 API - 请求的身份验证范围不足
Google Calendar API - Request had insufficient authentication scopes
我的应用显示来自用户 gmail“主”日历的事件列表(和 creates/deletes 事件)。应用程序适用于我的一个 Gmail 帐户,当我尝试使用其他 Gmail 帐户登录时,我在获取事件时遇到错误:
GET 403, and in response => Request had insufficient authentication scopes.
我的加载日历代码:
window.gapi.load("client:auth2", () => {
console.log("Client loaded!!");
window.gapi.client.init({
apiKey: "MY_API_KEY",
clientId:
"MY_CLIENT_ID",
discoveryDocs: [
"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",
],
scope: "https://www.googleapis.com/auth/calendar.events",
});
window.gapi.client.load("calendar", "v3", () => {
console.log("Calendar loaded!!");
// List events after calendar is loaded
listUpcomingEvents("week");
});
});
在我的 listUpcomingEvents() 函数中,我使用纯 js(无后端)获取事件:
window.gapi.client.calendar.events
.list({
calendarId: "primary",
timeMin: start.toISOString(),
timeMax: end,
showDeleted: false,
singleEvents: true,
maxResults: 100,
orderBy: "startTime",
})
.then(function (response) {
var events = response.result.items;
console.log("Events:", events);
// Set events
setEvents([...events]);
setEventsFilter(events_filter);
});
我已经尝试在我的 Google 云平台(oauth 同意屏幕)中设置范围,切换到其他范围或添加超过范围但没有任何效果。我什至尝试制作日历 public 和我在 Whosebug 上找到的其他一些东西。
Request had insufficient authentication scopes.
表示用户已通过一个范围进行身份验证,但您使用的方法需要另一个范围。
方法Events.list 需要以下范围之一
现在您发布的代码显示 scope: "https://www.googleapis.com/auth/calendar.events",
这是应该允许您访问列表事件的范围之一。
问题是,当您 运行 该代码时,弹出同意屏幕并且用户授权您的应用程序。然后,您再次将范围更改为 https://www.googleapis.com/auth/calendar.events
和 运行 您的代码。但是新的同意屏幕没有弹出,因为用户当前已经通过身份验证。
您需要让您的应用再次请求用户授权,届时新范围将显示,如果用户同意,您将可以使用该方法。
执行此操作的最简单方法是转到用户 google 帐户并撤销已授予 运行 对您的应用程序的访问权限。 Google account
或者由于您的应用程序是 JavaScript,您应该可以等待一个小时,您的访问权限应该会过期,并且将再次要求用户同意。
我的应用显示来自用户 gmail“主”日历的事件列表(和 creates/deletes 事件)。应用程序适用于我的一个 Gmail 帐户,当我尝试使用其他 Gmail 帐户登录时,我在获取事件时遇到错误:
GET 403, and in response => Request had insufficient authentication scopes.
我的加载日历代码:
window.gapi.load("client:auth2", () => {
console.log("Client loaded!!");
window.gapi.client.init({
apiKey: "MY_API_KEY",
clientId:
"MY_CLIENT_ID",
discoveryDocs: [
"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",
],
scope: "https://www.googleapis.com/auth/calendar.events",
});
window.gapi.client.load("calendar", "v3", () => {
console.log("Calendar loaded!!");
// List events after calendar is loaded
listUpcomingEvents("week");
});
});
在我的 listUpcomingEvents() 函数中,我使用纯 js(无后端)获取事件:
window.gapi.client.calendar.events
.list({
calendarId: "primary",
timeMin: start.toISOString(),
timeMax: end,
showDeleted: false,
singleEvents: true,
maxResults: 100,
orderBy: "startTime",
})
.then(function (response) {
var events = response.result.items;
console.log("Events:", events);
// Set events
setEvents([...events]);
setEventsFilter(events_filter);
});
我已经尝试在我的 Google 云平台(oauth 同意屏幕)中设置范围,切换到其他范围或添加超过范围但没有任何效果。我什至尝试制作日历 public 和我在 Whosebug 上找到的其他一些东西。
Request had insufficient authentication scopes.
表示用户已通过一个范围进行身份验证,但您使用的方法需要另一个范围。
方法Events.list 需要以下范围之一
现在您发布的代码显示 scope: "https://www.googleapis.com/auth/calendar.events",
这是应该允许您访问列表事件的范围之一。
问题是,当您 运行 该代码时,弹出同意屏幕并且用户授权您的应用程序。然后,您再次将范围更改为 https://www.googleapis.com/auth/calendar.events
和 运行 您的代码。但是新的同意屏幕没有弹出,因为用户当前已经通过身份验证。
您需要让您的应用再次请求用户授权,届时新范围将显示,如果用户同意,您将可以使用该方法。
执行此操作的最简单方法是转到用户 google 帐户并撤销已授予 运行 对您的应用程序的访问权限。 Google account
或者由于您的应用程序是 JavaScript,您应该可以等待一个小时,您的访问权限应该会过期,并且将再次要求用户同意。