API Календаря Google: «У вас должен быть доступ автора к этому календарю». - PullRequest
1 голос
/ 06 июня 2019

Я использую API Календаря Google в своем приложении Rails 5.2.3 и пытаюсь создать события в Календаре Google в своем домене G Suite. Я уже могу читать календарь и список событий. Когда я пытаюсь вставить событие, я получаю сообщение об ошибке «requiredAccessLevel: у вас должен быть доступ для записи в этот календарь».

Поскольку это для внутреннего приложения, я зарегистрировал учетную запись службы в консоли API Google и убедился, что она может читать календари и события.

В консоли администратора G Suite я дал разрешения учетной записи службы для областей действия https://www.googleapis.com/auth/calendar и https://www.googleapis.com/auth/calendar.events

Я сам создал календарь под своей учетной записью и добавил служебную учетную запись с разрешениями «Внести изменения в события»

Это пример кода, который я запускаю.

    calendar_id = '12345' #obviously not but I've verified that I have the right calendar.
    scopes = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events']
    authorization = Google::Auth.get_application_default(scopes)
    client = Google::Apis::CalendarV3::CalendarService.new
    client.authorization = authorization

    start_time = Time.current
    end_time = Time.current + 2.hours

    newEvent = Google::Apis::CalendarV3::Event.new({
        summary: "Sample Event",
        start: {
            date_time: start_time.rfc3339,
            time_zone: start_time.strftime("%Z")
        },
        end: {
            date_time: end_time.rfc3339
            time_zone: end_time.strftime("%Z")
        }
    })

    result = client.insert_event(calendar_id, newEvent)

Я уверен, что где-то пропустил разрешение на доступ для записи, но не понял, почему я получаю "requiredAccessLevel: вам нужен доступ для записи к этому календарю". вместо вставки рабочая. Спасибо за любые предложения!

1 Ответ

0 голосов
/ 06 июня 2019

Спасибо Хло в комментарии выше. Решение состояло в том, чтобы изменить первые 5 строк на

scopes = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events']
authorization = Google::Auth.get_application_default(scopes)

auth_client = authorization.dup
auth_client.sub = 'account@mydomain.com'
auth_client.fetch_access_token!

client = Google::Apis::CalendarV3::CalendarService.new
client.authorization = auth_client
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...