如何通过通过Google App脚本创建访问WebApp时需要权限

时间:2018-12-18 02:17:11

标签: google-apps-script google-sheets

我有两个这样的Google Apps脚本:


脚本A:

这是一个Web应用程序。我像网络API一样使用它。根据参数,我将返回只能从我可以访问的SpreadSheet中读取的数据,并且将在此SpreadSheet中添加或编辑数据。

我发布了以下选项:

像我一样执行

谁有权访问网络应用程序:任何人


脚本B :(在SpreadSheet中)

我将此SpreadSheet用作输入表单。然后,我将请求通过UrlFetchApp函数编写脚本A。


问题: 当我使用UrlFetchApp函数时,响应内容是类似下图的html。我认为这是一个请求访问对话框,它将向脚本A所有者发送请求邮件。我试图共享脚本B项目来测试用户。工作正常。但是我想显示html对话框,并为测试用户做一些事情,使其可以正常发送邮件。


问题:

如何在SpreadSheet B中的对话框上显示此html内容?

如果有另一种我不能与其他人共享脚本A项目的方式,请告诉我!因为当我分享给他们时,他们可以看到我的脚本A。

You need permission

我已经使用ScriptApp.getOAuthToken来验证Webapp,如下所示:

function requestAPI(request_parameter_string) {
    var param = {
        method      : "get",
        headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
        followRedirects : true,
        muteHttpExceptions:true
    };
    
    Logger.log("run to this");
    var url = "https://script.google.com/macros/s/" + api_id + "/exec?" + request_parameter_string;
    var response = UrlFetchApp.fetch(url,param);
    if(response.getContentText() != "Success"){
        return response.getContentText();
    }
}

1 个答案:

答案 0 :(得分:2)

您的情况如下。

  • Web应用部署为Execute as meWho has access to the web app:Anyone
  • 您要使用户使用访问令牌访问您的Web应用程序。

如果我的理解是正确的,那么该修改如何?

修改点:

  • 如果您访问拥有的Web应用程序,则可以使用访问令牌进行访问。
  • 如果其他用户访问您的Web Apps,与用户共享已部署Web Apps的项目文件,则用户可以使用访问令牌进行访问。
    • 不共享文件时,会发生此类错误。
    • 如果您使用容器绑定脚本,请共享它。
    • 如果您使用独立脚本,请共享它。
  • 对于访问令牌,https://www.googleapis.com/auth/drive必须包含在范围中。

参考文献: