Javascript googleapis失败(在JWT Auth之后),类型错误:authClient.request不是函数
我正在尝试访问google Sheets电子表格,该表格与API密钥属于同一帐户。我使用JWT是因为在交互过程中没有用户在场 下面是我认为获得工作表内容的最小实现 它总是以TypeError失败:authClient.request不是函数 在我看来,身份验证令牌已成功创建Javascript googleapis失败(在JWT Auth之后),类型错误:authClient.request不是函数,javascript,node.js,google-sheets,google-api,Javascript,Node.js,Google Sheets,Google Api,我正在尝试访问google Sheets电子表格,该表格与API密钥属于同一帐户。我使用JWT是因为在交互过程中没有用户在场 下面是我认为获得工作表内容的最小实现 它总是以TypeError失败:authClient.request不是函数 在我看来,身份验证令牌已成功创建 const fs = require('fs'); const { google } = require('googleapis'); fs.readFile('./<credentials>.json','u
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)
身份验证令牌的格式为:-
{
access_token: "<long_key>",
token_type: "Bearer",
expiry_date: 1587993215000,
id_token: undefined,
refresh_token: "jwt-placeholder"
}
这次修改怎么样 修改点: 请使用jwtClient像const sheets=google.sheets{version:v4,auth:jwtClient}一样进行身份验证。我想你的问题可能是这个原因。 修改脚本: 当您的脚本被修改时,它将变成如下所示 发件人: 致: 注: 在这次修改中,它假设您已经使用您的服务帐户获取并输入了Google电子表格的值。
如果我用auth:jwtClient替换auth,我会收到一个错误错误:调用方没有权限我不确定使用我的服务帐户的“get and put values”是什么意思。该工作表是使用我的标准帐户直接在谷歌工作表中创建的。@user3094755感谢您的回复。给您带来不便,我深表歉意。我可以问你谷歌电子表格是否已经与服务帐户的电子邮件共享了吗?因为为了使用服务帐户访问Google电子表格,电子表格需要与服务帐户的电子邮件共享。你能再确认一下吗?对auth:jwtClient的更改修复了最初的问题,因此这只是权限问题,你的建议让我尝试在生成密钥时使用Google API创建的电子邮件地址共享该表。电子邮件发送失败,但权限已添加到工作表中,因此它现在可以工作了-谢谢。@user3094755谢谢您的回复。我很高兴你的问题解决了。关于电子邮件发送失败,似乎这是服务帐户的规范。我为此道歉。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我。
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);
}
);