Сбой googleapis (после аутентификации JWT) с помощью TypeError: authClient.request не является функцией - PullRequest
1 голос
/ 27 апреля 2020

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

Ниже приведена минимальная реализация для получения содержимого листа.

Всегда происходит сбой при TypeError: authClient.request is not a function

Мне кажется, что токен авторизации успешно создан.

const fs = require('fs');
const { google } = require('googleapis');

fs.readFile('./<credentials>.json','utf-8',(e,content) => {
    if ( e ) return console.log('error',e);
    authorize(JSON.parse(content))
});

function authorize(credentials) {
    let jwtClient = new google.auth.JWT(
        credentials.client_email,
        null,
        credentials.private_key,
        ['https://www.googleapis.com/auth/spreadsheets.readonly']
    )
    jwtClient.authorize((e,auth) => {
        if ( e ) return console.log('authorize error',e);

        const sheets = google.sheets({version: 'v4', auth });

        sheets.spreadsheets.values.get({
            spreadsheetId: '<sheet_id>',
            range: 'Class Data!A1:E20',
          },(err,res) => {
              if ( err ) return console.log('SHEETS err',err);
              console.log('SHEETS res',res);
          });
    });    
};

Ошибка, о которой сообщают (полностью), последовательно ...

SHEETS err TypeError: authClient.request is not a function
    at /Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:238:31
    at Generator.next (<anonymous>)
    at /Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:19:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:15:12)
    at createAPIRequestAsync (/Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:56:12)
    at Object.createAPIRequest (/Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:48:9)
    at Resource$Spreadsheets$Values.get (/Users/web7/google-sheets/node_modules/googleapis/build/src/apis/sheets/v4.js:573:37)
    at jwtClient.authorize (/Users/web7/google-sheets/Server.js:25:36)
    at authorizeAsync.then.r (/Users/web7/google-sheets/node_modules/google-auth-library/build/src/auth/jwtclient.js:117:45)

Auth Токен имеет вид: -

{
 access_token: "<long_key>",
 token_type: "Bearer",
 expiry_date: 1587993215000,
 id_token: undefined,
 refresh_token: "jwt-placeholder"
}

1 Ответ

2 голосов
/ 27 апреля 2020

Как насчет этой модификации?

Точка модификации:

  • Пожалуйста, используйте jwtClient до auth как const sheets = google.sheets({ version: "v4", auth: jwtClient }). Я думаю, что причина вашей проблемы может быть в следующем.

Модифицированный скрипт:

Когда ваш скрипт модифицирован, он выглядит следующим образом.

С:
jwtClient.authorize((e,auth) => {
    if ( e ) return console.log('authorize error',e);

    const sheets = google.sheets({version: 'v4', auth });

    sheets.spreadsheets.values.get({
        spreadsheetId: '<sheet_id>',
        range: 'Class Data!A1:E20',
      },(err,res) => {
          if ( err ) return console.log('SHEETS err',err);
          console.log('SHEETS res',res);
      });
});
Кому :
jwtClient.authorize((err) => {
  if (err) console.log(err);
});
const sheets = google.sheets({ version: "v4", auth: jwtClient });
sheets.spreadsheets.values.get(
  {
    spreadsheetId: '<sheet_id>',
    range: 'Class Data!A1:E20',
  },
  (err, res) => {
    if (err) return console.log("SHEETS err", err);
    console.log("SHEETS res", res.data);
  }
);

Примечание:

  • В этой модификации предполагается, что вы уже получили и добавили значения для таблицы Google, используя свою учетную запись службы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...