首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: authClient.request不是一个函数(在JWT之后)

TypeError: authClient.request不是一个函数(在JWT之后)
EN

Stack Overflow用户
提问于 2020-04-27 12:18:02
回答 1查看 300关注 0票数 1

我试图访问一个谷歌工作表电子表格,该表是由相同的帐户作为API的密钥。我使用的是JWT,因为在交互过程中没有用户。

下面是我认为获得工作表内容的最小实现。

它总是在TypeError: authClient.request is not a function中失败

在我看来,已经成功地创建了一个令牌。

代码语言:javascript
复制
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);
          });
    });    
};

报告的错误(全部)是一贯的.

代码语言:javascript
复制
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令牌的形式如下:-

代码语言:javascript
复制
{
 access_token: "<long_key>",
 token_type: "Bearer",
 expiry_date: 1587993215000,
 id_token: undefined,
 refresh_token: "jwt-placeholder"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-27 12:35:03

这个修改怎么样?

修改点:

  • 请使用jwtClient来像const sheets = google.sheets({ version: "v4", auth: jwtClient })一样使用auth。我认为你出问题的原因可能是这个。--

修改脚本:

当您的脚本被修改时,如下所示。

发自:

代码语言:javascript
复制
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);
      });
});

至:

代码语言:javascript
复制
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电子表格的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61458745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档