Mi aplicación muestra una lista de eventos del calendario "principal" de Gmail de los usuarios (y crea/elimina eventos). La aplicación funciona bien con una de mis cuentas de Gmail, cuando intento iniciar sesión con otras cuentas de Gmail, aparece un error al buscar eventos:
GET 403, y en respuesta => La solicitud tenía alcances de autenticación insuficientes.
Mi código para cargar el calendario:
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"); }); });Y en mi función listUpcomingEvents() busco eventos con js puro (sin backend):
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); });Intenté establecer ámbitos en mi Google Cloud Platform (pantalla de consentimiento de autenticación), cambié a otros ámbitos o agregué más que un ámbito, pero nada funciona. Incluso intenté hacer público el calendario y muchas otras cosas que encontré en stackoverflow.
La solicitud tenía alcances de autenticación insuficientes.
Significa que el usuario se ha autenticado con un alcance pero el método que está utilizando requiere otro.
El método Events.list requiere uno de los siguientes ámbitos
Ahora, el código que ha publicado muestra el scope: "https://www.googleapis.com/auth/calendar.events", que es uno de los alcances que debería darle acceso a la lista de eventos.
El problema es que cuando ejecutó ese código, apareció la pantalla de consentimiento y el usuario autorizó su aplicación. Luego cambió el alcance a https://www.googleapis.com/auth/calendar.events y ejecutó su código nuevamente. Pero la nueva pantalla de consentimiento no apareció porque el usuario ya está autenticado.
Debe forzar su aplicación para solicitar la autorización del usuario nuevamente, en ese momento aparecerá el nuevo alcance y, si el usuario lo acepta, podrá usar ese método.
La forma más fácil de hacer esto es ir a la cuenta de Google de los usuarios y revocar el acceso que se le otorgó a su aplicación. cuenta Google
O como su aplicación es JavaScript, debería poder esperar una hora y su acceso debería caducar y se le pedirá al usuario que dé su consentimiento nuevamente.