API Google Календаря возвращает 403 для некоторых пользователей

#reactjs #google-calendar-api #google-api-js-client

Вопрос:

Я интегрировал небольшую функцию, которая считывает события календаря с каждого участника календаря Google моей организации. Это работает для большинства, но пара получает возврат 403.

Я думаю, это потому, что у них есть несколько учетных записей Google, подключенных к календарю, возможно, и у меня нет разрешения на чтение этих других учетных записей. Это единственная причина, о которой я могу думать. Надеюсь, кто — нибудь сможет здесь помочь-действительно застрял в поисках решения.

Я НЕ использую области только для чтения. Ниже приведена функция react, которая загружает события календаря для пользователя.

     const loadCalendar = () => {
    window.gapi.load('client:auth2', () => {
        console.log("fetching calendar for: ", userEmail);

        gapi.client.init({
            apiKey: "xyz",
            clientId: "xyz",
            discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest"],
            scope: "https://www.googleapis.com/auth/calendar",
        })

        gapi.client.load('calendar', 'v3', () => {
            gapi.auth2.getAuthInstance().then(() => {
                gapi.client.calendar.events.list({
                    'calendarId': 'primary',
                    'timeMin': (new Date()).toISOString(),
                    'showDeleted': false,
                    'singleEvents': true,
                    'maxResults': 12,
                    'orderBy': 'startTime',
                }).then(({ result }) => {
                    let filteredArr = [];
                    result.items.forEach(item => {
                        let obj = {
                            key: item.id,
                            attendees: item.attendees,
                            start: item.start["date"] ? item.start["date"] : new Date(item.start["dateTime"]).toLocaleString(),
                            summary: item.summary,
                            zoomLink: item.location
                        }
                        filteredArr.push(obj);
                    })
                    setCalendarEvents(filteredArr)
                })
            })
        })
    });
}
 

Комментарии:

1. Привет, @Tony! Чтобы лучше проанализировать вашу ситуацию, пожалуйста, поделитесь соответствующим кодом. Не стесняйтесь скрывать любую личную информацию об этом. Также, пожалуйста, уточните, используете ли вы делегирование всего домена.

2. @Jacques-GuzelHeron Большое спасибо, что посмотрели. Это действительно ставит меня в тупик. Добавлен код в правку с удаленными секретами.

Ответ №1:

После просмотра сценария я понимаю, что этот сценарий работает для каждого пользователя в вашей организации, за исключением двух конкретных пользователей. В этой ситуации я настоятельно рекомендую вам создать делегирование полномочий по всему домену рабочей области. С помощью этой операции вы создадите дополнительную учетную запись, которая сможет получить доступ ко всем пользовательским данным в вашей организации, чтобы вы могли получить доступ к календарям этих двух пользователей. Единственное необходимое обновление-это использование новых учетных данных учетной записи в вашем сценарии. Пожалуйста, проверьте связанные примеры и напишите ответ, если это не работает в вашем сценарии.