node.js - 无法通过Google电子表格API( Node JS)中的服务帐户访问写入

标签 node.js google-api google-oauth google-sheets-api google-api-nodejs-client

我有一个谷歌表格,我可以通过授予服务帐户访问权限来读取谷歌表格。以下是供阅读的代码片段。

 // 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);
    
   }
});

这工作得很好,我正在获取数据。但是当我想写入谷歌表时,它给出了一个错误。写作片段

//  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

请注意您是如何添加身份验证并将其设置到您的 jwtClient 的?这将为您的调用添加授权权限。

现在让我们看看您的更新声明

sheets.spreadsheets.values.update({
    spreadsheetId,
    range:"Sheet1!C3",
    valueInputOption,
    requestBody,

您尚未添加身份验证,这意味着您尝试在未经身份验证的情况下执行此操作。更新作用于用户的私有(private)数据,您需要获得权限才能调用此方法。

因此,按照这个逻辑,以下内容应该可以修复您的错误

sheets.spreadsheets.values.update({
    auth: jwtClient,
    spreadsheetId,
    range:"Sheet1!C3",
    valueInputOption,
    requestBody,

关于node.js - 无法通过Google电子表格API( Node JS)中的服务帐户访问写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72373231/

相关文章:

google-api - 使用 OAuth2 和 nodemailer 从我的 gmail 帐户发送电子邮件

rest - Google Admin SDK - 服务帐户无法访问资源

php - 在 PHP 中撤销 Google 访问 token

node.js - 无法安装express和packages

node.js - 为什么需要 module.exports=router ?

node.js - 从环回登录 API 获取自定义响应

c#-4.0 - 如何使用 youtube v3 api 和 C# 从 youtube 删除视频

mysql - 使用express、mysql和node.js的get方法发送变量的最佳方式是什么

java - Java Google Gmail Api 位于何处?

java - 将本地目录中的所有文件上传到 Google Drive (Google Drive API V3)