无法通过 google spread sheet api 中的服务帐户访问写入(节点 js)
Unable to write through service account access in google spread sheet api (node js)
我有一个 google sheet,我可以通过授予服务帐户访问权限来读取 google sheet。下面是阅读代码片段。
// configure a JWT auth client
let jwtClient = new google.auth.JWT(
privatekey.client_email,
null,
privatekey.private_key,
['https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive']);
//authenticate request
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
} else {
console.log("Successfully connected!");
}
})
// getting data from google sheet
sheets.spreadsheets.values.get({
auth: jwtClient,
spreadsheetId: spreadsheetId,
range: range
}, function (err, response) {
if (err) {
console.log('The API returned an error: ' + err);
} else {
console.log('Users list from Google Sheets:', response.data.values);
}
});
这非常有效,我正在获取数据。但是当我想写入googlesheet时,它给出了一个错误。写作片段
// writing to google sheets
let values = [
[
'abc','b.ed'
],
];
const requestBody = {
values,
};
sheets.spreadsheets.values.update({
spreadsheetId,
range:"Sheet1!C3",
valueInputOption,
requestBody,
}, (err, result) => {
if (err) {
// Handle error
console.log(err);
} else {
console.log('%d cells updated.', result.updatedCells);
}
});
我遇到的错误
GaxiosError: Login Required.
at Gaxios._request (/home/spread sheet auth (node js + service account)/node_modules/gaxios/build/src/gaxios.js:129:23)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
errors: [
{
message: 'Login Required.',
domain: 'global',
reason: 'required',
location: 'Authorization',
locationType: 'header'
}
]
}
让我们看看您的工作示例
sheets.spreadsheets.values.get({
auth: jwtClient,
spreadsheetId: spreadsheetId,
range: range
注意到您是如何添加 auth 并将其设置到您的 jwtClient 的吗?这会为您的调用添加授权权限。
现在让我们看看您的更新声明
sheets.spreadsheets.values.update({
spreadsheetId,
range:"Sheet1!C3",
valueInputOption,
requestBody,
您尚未添加身份验证,这意味着您正在尝试在未经过身份验证的情况下执行此操作。更新作用于用户的私人数据,您需要权限才能调用此方法。
所以按照这个逻辑,下面应该可以解决你的错误
sheets.spreadsheets.values.update({
auth: jwtClient,
spreadsheetId,
range:"Sheet1!C3",
valueInputOption,
requestBody,
我有一个 google sheet,我可以通过授予服务帐户访问权限来读取 google sheet。下面是阅读代码片段。
// configure a JWT auth client
let jwtClient = new google.auth.JWT(
privatekey.client_email,
null,
privatekey.private_key,
['https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive']);
//authenticate request
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
} else {
console.log("Successfully connected!");
}
})
// getting data from google sheet
sheets.spreadsheets.values.get({
auth: jwtClient,
spreadsheetId: spreadsheetId,
range: range
}, function (err, response) {
if (err) {
console.log('The API returned an error: ' + err);
} else {
console.log('Users list from Google Sheets:', response.data.values);
}
});
这非常有效,我正在获取数据。但是当我想写入googlesheet时,它给出了一个错误。写作片段
// writing to google sheets
let values = [
[
'abc','b.ed'
],
];
const requestBody = {
values,
};
sheets.spreadsheets.values.update({
spreadsheetId,
range:"Sheet1!C3",
valueInputOption,
requestBody,
}, (err, result) => {
if (err) {
// Handle error
console.log(err);
} else {
console.log('%d cells updated.', result.updatedCells);
}
});
我遇到的错误
GaxiosError: Login Required. at Gaxios._request (/home/spread sheet auth (node js + service account)/node_modules/gaxios/build/src/gaxios.js:129:23) at processTicksAndRejections (node:internal/process/task_queues:96:5) { errors: [ { message: 'Login Required.', domain: 'global', reason: 'required', location: 'Authorization', locationType: 'header' } ] }
让我们看看您的工作示例
sheets.spreadsheets.values.get({
auth: jwtClient,
spreadsheetId: spreadsheetId,
range: range
注意到您是如何添加 auth 并将其设置到您的 jwtClient 的吗?这会为您的调用添加授权权限。
现在让我们看看您的更新声明
sheets.spreadsheets.values.update({
spreadsheetId,
range:"Sheet1!C3",
valueInputOption,
requestBody,
您尚未添加身份验证,这意味着您正在尝试在未经过身份验证的情况下执行此操作。更新作用于用户的私人数据,您需要权限才能调用此方法。
所以按照这个逻辑,下面应该可以解决你的错误
sheets.spreadsheets.values.update({
auth: jwtClient,
spreadsheetId,
range:"Sheet1!C3",
valueInputOption,
requestBody,