【问题标题】:403 error when executing Google Apps Script form a different google account从不同的 Google 帐户执行 Google Apps 脚本时出现 403 错误
【发布时间】:2016-04-13 07:21:35
【问题描述】:

我有这个 javascript 来提取 html 表,然后将数组作为参数传递给谷歌应用程序脚本。

var CLIENT_ID = 'some ID';
var SCRIPT_ID = 'some ID';
var SCOPES = ['https://www.googleapis.com/auth/drive.file'];

    function handleAuthClick(event) {
            gapi.auth.authorize(
                {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': true},
                handleAuthResult);
    }

           function handleAuthResult(authResult) {
            if (authResult) {
              // Access token has been successfully retrieved, requests can be sent to the API
            } else {
              // No access token could be retrieved, force the authorization flow.
              gapi.auth.authorize(
                  {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': false},
                  handleAuthResult);
            }
          }


    function exportGsheet() {
        var myTableArray = [];
        $("table#fin tr").each(function() {
        var arrayOfThisRow = [];
        var tableData = $(this).find('td');
        if (tableData.length > 0) {
        tableData.each(function() { arrayOfThisRow.push($(this).text()); });
        myTableArray.push(arrayOfThisRow);
        }
        });

        var params = JSON.stringify(myTableArray);
        var request = {
            'function': 'setData',
            'parameters': params,
            'devMode': true // Optional.
        };

        var op = gapi.client.request({
            'root': 'https://script.googleapis.com',
            'path': 'v1/scripts/' + SCRIPT_ID + ':run',
            'method': 'POST',
            'body': request
        });

        op.execute(function(resp){opensheet(resp)});
        }

以下是应用程序脚本。这使用 Drive API 和 Executable API。

var DOC_ID = 'some id';
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'"); 
var folder = DriveApp.getFolderById('some id');

function setData(parameters) {
  var getFile = DriveApp.getFileById(DOC_ID);
  var file = getFile.makeCopy(formattedDate, folder);
  var ss = SpreadsheetApp.open(file);
  var ssId = ss.getId();
  ss.getSheets()[0].getRange(5,1,50,24).clear();
  var e = JSON.parse(parameters);
  var outerArray = [];
  for(var i = 0; i < e.length; i++) {
    outerArray.push(e[i]);
  }
  ss.getSheets()[0].getRange(5, 2, outerArray.length, outerArray[0].length).setValues(outerArray);
  return {"url":ssId};
  Logger.log(ssId);
}

当我授权使用拥有应用程序脚本和项目的 gmail ID(我自己的 gmail 帐户)时,一切正常。但是当我使用不同的 gmail 帐户进行身份验证时,出现以下错误:

error: {code: 403, message: "The caller does not have permission", status: "PERMISSION_DENIED"}
code: 403
message: "The caller does not have permission"
status: "PERMISSION_DENIED"

我打算公开这个应用程序,任何人都应该能够使用他们的 gmail 帐户进行身份验证并执行脚本。我怎么做?请帮忙。

【问题讨论】:

  • id为docid的文件应该公开阅读
  • 它已经公开了。后来我才明白,我必须在开发者控制台项目下提供权限。转到“项目“xxx”的权限-权限-添加成员”-然后添加域或电子邮件 ID。添加的电子邮件 ID/域将能够执行脚本。但是,我无法使用 gmail 域。我在谷歌支持下提出了issue

标签: google-apps-script google-api


【解决方案1】:

伙计们,我后来发现了这个问题。碰巧是开发者控制台的权限问题。我们必须在开发者控制台项目下为应用程序脚本关联的项目分配权限。所以请按照以下步骤操作:

  • 打开您的应用程序脚本转到 Resources-Developers Console Project
  • 单击“此脚本为
    下以蓝色显示的项目名称 当前与项目相关联:“它会将您重定向到开发人员 控制台项目。
  • 单击左上角的菜单,然后单击 权限
  • 在权限下点击添加成员
  • 在成员中键入您要提供的电子邮件 ID 或域 权限和所需的权限级别。点击“添加”

你已经完成了。

但是,我无法添加整个 gmail 域,也无法添加 allAuthenticatedUsers。我在谷歌支持下提出了issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2023-01-20
    相关资源
    最近更新 更多