Google表格,带有服务帐户的JWT客户端

jld*_*ont 4 javascript google-api node.js jwt google-sheets-api

我把头发拉出来!救命 !!更新:我正在使用google-auth-library的v1.0.0和googleapis的v24.0.0.

const { JWT } = require('google-auth-library');
var google = require('googleapis');
var sheets = google.sheets('v4');

const client = new JWT({
  email: keys.client_email
  ,key: keys.private_key
  ,scopes: ['https://spreadsheets.google.com/feeds']
});

return new Promise(function(resolve, reject) {

  client.authorize()
  .then((obj) => {

  // fails at this call
  sheets.spreadsheets.values.append({

    auth: client
    ,range: "A1"
    ,spreadsheetId: SHEET_ID
    ,insertDataOptions: "INSERT_ROWS"
    ,responseDateTimeRenderOption: "FORMATTED_STRING"
    ,responseValueRenderOption: "UNFORMATTED_VALUE"
    ,valueInputOption: "RAW"
    ,resource: {
      values: [
        [1,2,3]
      ]
    }
Run Code Online (Sandbox Code Playgroud)

.......为清晰起见省略了代码

我一直在:

'json'不是有效的配置选项.请改用"数据".该库正在使用Axios进行请求.请参阅 https://github.com/axios/axios以了解有关有效请求选项的更多信息.在DefaultTransporter.request上的Object.validate(/ user_code/node_modules/google-auth- library/build/src/options.js:32:19)(/ user_code/node_modules/google-auth-library/build/src/transporters.许:49:23)在JWT.(/user_code/node_modules/google-auth-library/build/src/auth/oauth2client.js:427:63)步骤(/user_code/node_modules/google-auth-library/build/src/auth/oauth2client.js: 57:23)在Object.next(/user_code/node_modules/google-auth-library/build/src/auth/oauth2client.js:38:53)at fulfilled(/ user_code/node_modules/google-auth-library/build/src/auth/oauth2client.js:29:58)at process._tickDomainCallback(internal/process/next_tick.js:135:7)

Ste*_*nze 8

我通过以下https://www.npmjs.com/package/googleapis解决了这个问题,而根本没有使用google-auth-library.

var google = require('googleapis');
const client = new google.auth.JWT(
    keys.client_email,
    null,
    keys.private_key,
    ['https://www.googleapis.com/auth/spreadsheets'],
    null
);
return new Promise((resolve, reject) => {
    client.authorize((err, tokens) => {
        if (err) {
            reject(err);
        } else {
            google.options({
                auth: client
            });
            resolve();
        }
    });
});

//and then use client as you did
Run Code Online (Sandbox Code Playgroud)