Аутентифицировать библиотеку googleapis в облачной функции Google - PullRequest
0 голосов
/ 30 апреля 2020

Для локальной разработки большинство клиентских библиотек Google настроено на использование переменной среды GOOGLE_APPLICATION_CREDENTIALS, чтобы найти учетные данные для используемой учетной записи службы, а затем аутентифицировать эту библиотеку. При развертывании в GCP они также не требуют никакой ручной аутентификации в коде, а вместо этого используют свою среду для аутентификации за кулисами. Это означает, что большинство клиентских библиотек, например BigQuery, Cloud Storage и т. Д. c, просто работают в облачных функциях, не требуя никакого кода для аутентификации. Однако клиентская библиотека googleapis Nodejs не использует GOOGLE_APPLICATION_CREDENTIALS и, по-видимому, требует ручной аутентификации в коде. Ниже приведен минимальный пример того, как я делаю это локально. Как можно запустить этот код в облачной функции Google без необходимости загружать учетные данные учетной записи службы в облачную функцию?

const { google } = require("googleapis");
const key = require("service_account_credentials.json");

const client = new google.auth.JWT(key.client_email, null, key.private_key, [
  "https://www.googleapis.com/auth/spreadsheets",
]);

client.authorize(function (err, tokens) {
  const gsapi = google.sheets({ version: "v4", auth: client });
  const opt = {
    spreadsheetId: "spreadsheetId",
    range: "Sheet1!A:T",
  };
  gsapi.spreadsheets.values.get(opt).then(res => console.log(res));
});

1 Ответ

1 голос
/ 30 апреля 2020

Мне удалось найти решение этой проблемы в readme.md репозитории googleub googleapis nodejs. Для решения моей проблемы я использовал:


async function main() {
  const auth = new google.auth.GoogleAuth({
    scopes: ["https://www.googleapis.com/auth/spreadsheets"],
  });
  const authClient = await auth.getClient();
  const project = await auth.getProjectId();
  const gsapi = google.sheets({ version: "v4", auth: authClient });
  const opt = {
    spreadsheetId: "spreadsheetID",
    range: "Sheet1!A:T",
  };
  gsapi.spreadsheets.values.get(opt).then(res => console.log(res.data.values));
}
...