Google Apps脚本-部署为Web应用+仅使用公司帐户访问

时间:2019-09-01 10:52:08

标签: google-apps-script web-applications google-apps-script-web-application

我正在尝试通过URL触发应用程序脚本。

为此,我将脚本部署为Web App,然后在工作表上提供一个按钮,该按钮连接到访问硬编码URL的简单函数。

我的问题是,只有在为Anyone, even anonymous部署了Web App的情况下,此机制才有效。我宁愿将其保留在公司域中,也就是已登录的用户。

但是,UrlFetchApp.fetch(url)甚至对于已登录的用户也不起作用。

我该怎么做才能仅允许已登录的用户“运行” URL?

谢谢

1 个答案:

答案 0 :(得分:7)

我遇到了类似的问题,所以我就是这样做的。

  1. 创建了一个自定义功能,用于检查授权用户
  2. 部署脚本,使得Anyone, even anonymous可以访问该脚本

首先,声明您打算允许访问的域-

var authorizedDomains = 'google.com,google.io,google.org'; // comma separated
// DO NOT add http or https
// Currently, this setup doesn't support sub-domains (as the regex has not been configured to handle that

然后使用以下函数返回布尔值( true false )-

function userAccess() {
  var authorisedUser = false;
  var emailRegex = /\@(.*)/;
  var userDomain;
  try {
    userDomain = emailRegex.exec(activeUser)[1];
  } catch (error) {
  }
  var authorizedDomainNames = authorizedDomains.split(',');
  for (var i = 0; i < authorizedDomainNames.length; i++) {
    if (authorizedDomainNames[i] == userDomain) {
      authorisedUser = true;
      break;
    }
  }
  Logger.log(authorisedUser);
  return authorisedUser;
}

最后,在您的doGet(e)函数中,在提供HTML文件之前,用IF条件包装它;如下所示-

function doGet(e) {
  var htmlFile;
  var title;
  if (userAccess()) {
    htmlFile = 'Index';
    title = 'Index'
    return HtmlService.createHtmlOutputFromFile(htmlFile).setTitle(title);
  }
}