该方法是太安全:没有人可以访问。如果您的网络应用程序部署了“执行应用程序为我”选项,则Session.getActiveUser().getEmail()
可能会返回空字符串。见documentation:
在何种情况下的电子邮件地址可有所不同:例如,用户的电子邮件地址不在允许脚本,并且不需要用户的权限运行,就像任何上下文中可用[...]一个部署为“作为我执行”的web应用程序(即由开发人员而不是用户授权)。但是,如果开发人员和用户属于同一个G Suite网域,这些限制通常不适用。
的问题是,即使用户登录后才能访问的Web应用程序,他们并没有授权其代表他们做任何事,例如,发现他们的电子邮件地址。
如果Web应用程序被部署为由“用户访问Web应用程序”执行,那么他们将被要求授权,因此Web应用程序可以学习他们的身份。但是,它只能修改用户已经可以直接修改的文件。
我解决这个难题的方法是给授权用户一个关键的web应用程序(一些长的随机字符串)。他们通过将https://..../exec?key=mykey
访问应用程序,该应用程序检查重点如下:现在
function doGet(e) {
if (e.parameter.key == "mykey") {
var ss = SpreadsheetApp.openById("spreadsheet Id");
// modify the spreadsheet
}
}
,这是比你原来的做法更是简陋,但很有效。如果错误的人获得钥匙,他们将能够使用该应用程序,但损害将限于应用程序可以做的事情。它不像有人访问您的Google帐户那么糟糕。
来源
2017-08-12 18:40:56
FTP