首页 文章

未经授权仅限明确请求Google表格API

提问于
浏览
1

我在node.js应用程序中使用Google表格API v4 . 我正在使用范围设置为“http://www.googleapis.com/auth/spreadsheets”的JWT客户端进行身份验证 . 我发现我可以成功更新工作表或执行追加操作,但在尝试清除工作表时收到401 Unauthorized错误 .

在我的开发环境中,我使用的是不属于我所属组织的服务用户 . 这会影响哪些电话被授权?查看在组织级别设置共享权限的文档,似乎控件不是那么精细 .

auth(scopes) {
    const key = process.env.GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY;
    const email = process.env.GOOGLE_SERVICE_ACCOUNT_CLIENT_EMAIL;
    const jwtClient = new google.auth.JWT(email, null, key, scopes);
    jwtClient.authorize((err) => {
      if (err) {
        console.log(err);
      }
    });
    return jwtClient;
  }

...

async updateSheet(jwtClient, spreadsheet_id, sheet_name, data) {
     const write = util.promisify(sheets.spreadsheets.values.update);
     const body = {
         majorDimension: 'COLUMNS',
         values: data
     };
     const request = {
         spreadsheetId: spreadsheet_id,
         range: sheet_name,
         valueInputOption: 'user_entered',
         resource: body,
         auth: jwtClient,
     };
     const response = await write(request);
     return response;
 },
 async clearSheet(jwtClient, spreadsheet_id, sheet_name) {
     const clear = util.promisify(sheets.spreadsheets.values.clear);
     const request = {
         spreadsheetId: spreadsheet_id,
         range: sheet_name
     };
     const response = await clear(request);
     return response;
 }

使用相同的jwt客户端,电子表格ID和工作表名称,第一次调用成功,但第二次调用失败 .

await google.updateSheet(google_jwtClient, spreadsheet_id, sheet_name, data);
await google.clearSheet(google_jwtClient, spreadsheet_id, sheet_name);

{message:'请求缺少必需的身份验证凭据 . 预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据 . 请参阅https://developers.google.com/identity/sign-in/web/devconsole-project . ',域名:'全球',原因:'未授权'}

1 回答

  • 1

    '请求缺少必需的身份验证凭据 . 预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据 .

    表示您没有随请求发送凭据 .

    您没有将jwtClient应用于请求 .

    async clearSheet(jwtClient, spreadsheet_id, sheet_name) {
         const clear = util.promisify(sheets.spreadsheets.values.clear);
         const request = {
             spreadsheetId: spreadsheet_id,
             auth: jwtClient,
             range: sheet_name
         };
         const response = await clear(request);
         return response;
     }
    

相关问题