node.js - NodeJS Googleapis 服务帐号认证
问题描述
我正在尝试使用服务帐户对 GoogleAPI 执行身份验证。我设置了一个服务帐户,其凭据位于credentials.json
. 我尝试访问一个私人工作表,我在其中添加了具有编辑权限的服务帐户的电子邮件地址。
这是我正在使用的代码:
const {
google
} = require('googleapis');
const fs = require('fs');
let scopes = ['https://www.googleapis.com/auth/spreadsheets'];
let credentials = require("./credentials.json");
const authClient = new google.auth.JWT(
credentials.client_email,
null,
credentials.private_key,
scopes);
authClient.authorize(function(err, tokens) {
if (err) {
console.log(err);
return;
} else {
authClient.setCredentials(tokens);
}
});
const sheets = google.sheets({
version: 'v4',
authClient
});
let spreadsheetId = //...
let range = //...
const request = {
spreadsheetId: spreadsheetId,
range: range
};
sheets.spreadsheets.values.get(request, function(err, response) {
if (err) {
console.log('The API returned an error: ' + err);
} else {
console.log('Result: ' + response);
}
});
我猜 API 会随着时间而改变,因为许多指南展示了不同的方法,最终没有一个对我有用。错误如下:
The API returned an error: Error: The request is missing a valid API key.
据我了解,只有在未经身份验证的情况下访问公共表时才需要一个简单的 API 密钥,所以我不明白为什么它甚至需要它。如果我添加这样的 API 密钥,我会收到错误
The API returned an error: Error: The caller does not have permission
使用
$ npm list googleapis
`-- googleapis@52.1.0
任何帮助将不胜感激。
解决方案
推荐阅读
- php - PHP脚本不显示目录中的所有图像
- java - 在 Java 中使用 Swing Timer 以间隔绘制不同的形状
- html - 向网页添加传单地图时,滚动条和其他内容消失(weebly)
- java - Swing:多行工具栏或使用 Flowlayout 作为工具栏
- node.js - 如何将reactjs与express api连接起来?
- python - NameError:名称“标签”未定义 - Python Tkinter
- wordpress - 发布视图计数未使用 WP Super Cache 更新
- ionic-framework - 从 Ionic 浏览器更改启动画面
- css - 如何创建溢出固定高度背景图像的内容区域?
- javascript - Reactjs 源码图