代码之家  ›  专栏  ›  技术社区  ›  ansythmus

未经授权,仅用于清除请求Google Sheets API

  •  1
  • ansythmus  · 技术社区  · 7 年前

    我正在节点中使用Google Sheets API v4。js应用程序。我正在使用范围设置为' http://www.googleapis.com/auth/spreadsheets '。我发现我可以成功地更新工作表或执行追加操作,但在尝试清除工作表时会出现401未经授权的错误。

    在我的开发环境中,我使用的服务用户不属于我所属的组织。这是否会对授权的呼叫产生影响?查看有关在组织级别设置共享权限的文档,这些控件似乎没有那么细粒度。

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

    {消息:'请求缺少必需的身份验证凭据。 需要OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据。 看见 https://developers.google.com/identity/sign-in/web/devconsole-project “.”, 域:“全局”, 原因:“未经授权”}

    1 回复  |  直到 7 年前
        1
  •  1
  •   Linda Lawton - DaImTo    7 年前

    '请求缺少必需的身份验证凭据。需要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;
     }