Ошибка «Превышен дневной лимит для неаутентифицированного использования.Для продолжения использования требуется регистрация на вызове API - PullRequest
0 голосов
/ 27 сентября 2019

Попытка заставить мое приложение expressJS контролировать файлы на диске Google.Я использовал пакет узла googleapis.Следуя слегка устаревшей / неправильной статье здесь , я получил скрипт:

  • перенаправить пользователя на его URL авторизации
  • захватить 'код'из параметра get и затем ...
  • зарегистрируйте его обратно как токены доступа, которые затем можно использовать для ...
  • создания зарегистрированного объекта "auth"

Когда я использую это для создания приводного объекта и пытаюсь получить его в список файлов, я получаю следующую ошибку: «Ошибка: превышен суточный лимит для использования без аутентификации.Для продолжения использования требуется регистрация '

Эта ошибка уже появилась на SO вопрос и на github .

Следуя общим советам, я повторяювключил интерфейс api, повторно загрузил ключ доступа.Я также пытался заменить область чувствительного диска областью gmail, но это тоже не сработало.Я не уверен, куда еще обратиться, чтобы начать отладку на этом этапе.У меня есть подозрение, что весь объект auth формируется неправильно, но я не могу найти ничего неправильного.

Это связанный фрагмент кода приложения Express, который я использую для создания authObject, а затем для чтения файлов дисков..

/**
 * Google Utility class that packages different actions related to authentication
 */
class GoogleUtil {
  constructor(secretFileName = 'client_secret.json') {
    const secret = JSON.parse(fs.readFileSync(secretFileName)).web;
    const { client_id, client_secret, redirect_uris } = secret;
    this.client_id = client_id;
    this.client_secret = client_secret;
    this.redirect_uri = redirect_uris[0];
    this.standardScope = [
      'https://www.googleapis.com/auth/drive',
      // 'https://www.googleapis.com/auth/gmail.readonly',
      // 'https://www.googleapis.com/auth/userinfo.profile'
    ];
  }

  createConnection() {
    return new google.auth.OAuth2(this.client_id, this.client_secret, this.redirect_uri); // form authObject
  }
  getConnectionUrl(auth) {
    return auth.generateAuthUrl({
      access_type: 'offline',
      prompt: 'consent',
      scope: this.standardScope
    });
  }
  async getAccessTokenFromCode(code) {
    var auth = this.createConnection();
    const data = await auth.getToken(code);
    return data.tokens;

  }
}
const g = new GoogleUtil();


/**
 * BEGIN ROUTE DEFINITIONS
 */

// THIS IS FIRST STEP. FRONTEND WILL REDIRECT TO GIVEN URL
app.get('/api/googleLoginUrl', async (req, res) => {
  const oAuth2Client = g.createConnection();
  const url = g.getConnectionUrl(oAuth2Client);
  res.json({ url });
});


// *****
// NOTE: THIS IS ROUTE THAT ATTEMPTS TO LIST FILES AND THROWS ERROR
// *****
app.get('/google-auth-redirect', async (req, res) => {
  if (!req.query.code) return res.send('Malformed request');

  const tokens = await g.getAccessTokenFromCode(req.query.code);
  const auth = g.createConnection().setCredentials(tokens);


  const drive = google.drive({ version: 'v3', auth: auth });
  drive.files.list({
    pageSize: 10,
    fields: 'nextPageToken, files(id, name)',
  }, (err, resp) => {
    if (err) return console.log('The API returned an error: ' + err);
    console.log(resp);
  });

  res.redirect('/');
});

В консоли разработчика Google нажатие на «создать учетные данные» в обзоре API накопителя сообщает мне, что мои текущие учетные данные совместимы.Области проекта включают в себя '../auth/drive'.

Я бы хотел, чтобы он мог отображать файлы из учетной записи аутентифицированного пользователя.

1 Ответ

0 голосов
/ 27 сентября 2019

Я думаю, это может быть связано с тем, как вы запрашиваете разрешения.Если вы используете приложение для манипулирования файлами дисков пользователя, вам понадобится несколько вещей:

  1. Проверьте, правильно ли настроены области доступа.
  2. Проверьте параметр аутентификации / Экран Oauthнастройка с указанными областями.

Возможно, вы захотите прочитать некоторую документацию, касающуюся авторизации пользователей

Надеюсь, это поможет!;)

...