Календарь Google: ошибка: превышен суточный лимит для использования без аутентификации - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь следовать примеру API календаря Google nodejs, приведенному в документации Google (https://developers.google.com/calendar/quickstart/nodejs), чтобы получить доступ к основным событиям календаря Google, и я получаю эту ошибку: «Дневной лимит для неаутентифицированных Использование превышено. Для продолжения использования требуется регистрация. "

Я знаю, что правильно проходил поток OAuth, потому что мой проект с доступом к календарю указан здесь: https://myaccount.google.com/permissions?pli=1.

Вот мои области видимости:

const SCOPESAUTH = [
'https://www.googleapis.com/auth/calendar',
'https://www.googleapis.com/auth/calendar.readonly',
'https://www.googleapis.com/auth/calendar.events'

];

В консоли разработчика на вкладке экрана согласия OAuth я НЕ установил области действия в этом разделе: «Области для API Google». Когда я пытаюсь установить их, он говорит, что Google должен одобрить доступ к этим чувствительным областям. Тем не менее, экран согласия не говорит: «непроверенное приложение». Приложение находится в разработке, а не в производстве.

Google делает c и говорит: «Ошибка dailyLimitExceeded указывает на то, что предел вежливости API для вашего проекта достигнут». На странице квот в консоли разработчиков мое использование записывается как 0. Я включил Google Calendar API.

Вот функции облака OAuth:

    const functionsOauthClient = new OAuth2Client(CONFIG_CLIENT_ID, CONFIG_CLIENT_SECRET,
    FUNCTIONS_REDIRECT);

// visit the URL for this Function to request tokens
exports.authgoogleapi = functions.https.onRequest((req, res) => {
    // req.query.id === device id of the user
    res.set('Cache-Control', 'private, max-age=0, s-maxage=0');
    res.redirect(functionsOauthClient.generateAuthUrl({
        access_type: 'offline',
        scope: SCOPESAUTH,
        prompt: 'consent',
        state: req.query.id
    }));
});


// redirect URI
exports.oauthcallback = functions.https.onRequest(async (req, res) => {
    res.set('Cache-Control', 'private, max-age=0, s-maxage=0');
    const code = req.query.code;
    try {
        const {tokens} = await functionsOauthClient.getToken(code);
        // store the tokens for retrieval by client app that is then sent to the getEvents cloud cloud unction
        admin.database().ref(`Devices/${req.query.state}/api_tokens`).set(tokens);
        return res.status(200).send('App successfully configured with new Credentials.');
    } catch (error) {
        return res.status(400).send(error);
    }
});

Вызов oauthcallback возвращает статус 200.

Ниже приведен код, который выдает ошибку. Обратите внимание, что req.body.token был создан во время потока OAuth, сохранен в Firebase и затем передан в качестве параметра этой облачной функции Google.

    exports.getEvents = functions.https.onRequest((req, res) => {
      ...

      const authClient = new OAuth2Client(CONFIG_CLIENT_ID, CONFIG_CLIENT_SECRET, FUNCTIONS_REDIRECT);
      authClient.setCredentials(req.body.token);
      const calendar = google.calendar({version: 'v3', authClient});
      return calendar.events.list({
          calendarId: 'primary',
          timeMin: (new Date()).toISOString(),
          maxResults: 10,
          singleEvents: true,
          orderBy: 'startTime',
      }, (err, result) => {...

Есть предложения? Спасибо.

1 Ответ

1 голос
/ 17 марта 2020

Я нашел проблему.

const calendar = google.calendar({version: 'v3', authClient})

должно быть:

const calendar = google.calendar({version: 'v3', auth: authClient})
...