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,您应该可以等待一个小时,您的访问权限应该会过期,并且将再次要求用户同意。