【发布时间】:2016-10-13 11:26:44
【问题描述】:
我正在编写一个简单的谷歌应用脚本应用程序,它执行一些数据操作取决于请求页面的用户。
根据google documentation object Session 有 getActiveUser() 和 getEffectiveUser() 我目前使用它们来确定用户。 看看代码:
var email = Session.getActiveUser().getEmail();
switch (email){
case 'test@gmail.com':
/*Some code here*/
return true;
case 'test2@gmail.com':
/*Some code here*/
return true;
default:
return false;
}
它看起来应该可以工作,但不幸的是它没有按预期工作(至少对我来说)。
上面的代码在 onOpen 触发器触发时运行,并且在用户第一次尝试运行此代码时设置所有权限。
所以,我决定进行跟踪,发现Session.getActiveUser().getEmail(); 和Session.getEffectiveUser().getEmail(); 为用户返回了错误的电子邮件。
对于创建脚本Session.getActiveUser().getEmail(); 的第一个用户(我)返回正确的电子邮件,但对于所有其他用户,它也会返回我的电子邮件。
好的,我决定用 Session.getEffectiveUser().getEmail(); 和 BOOM 替换 Session.getActiveUser().getEmail(); - 它适用于其他人,但不适用于我......
怎么可能?有什么想法吗?
- 我注意到,当我从 ScriptEditor 运行代码时,代码对所有用户来说都是一种魅力,但是当它在 onOpen 触发时运行时,它的工作方式无法预测。
此电子表格与多人共享。
感谢任何帮助。
【问题讨论】:
-
检查触发器restrictions 我相信这可能与此有关。简单的触发器在授权和获取运行它们的用户方面效果不佳
-
@Vytautas 非常感谢您的回复,但这是我在编写脚本时查看的第二个资源(页面)。此外,在我看来,我很确定所有要求都得到了满足(并且在撰写此评论时再次进行了重新检查)。
-
两个问题:1. 您的所有用户都来自同一个 Google Apps for Business 域吗?如果是这样
Session.getActiveUser().getEmail()应该可以工作。如果不是,规范说它将返回一个空白字符串。 2.您是否考虑过使用event object? -
@JoshDawson,1) 我刚刚创建了一个 google 表格文档,与我的朋友共享,实现了所有请求的逻辑并为这个确切的项目添加了一个触发器。所以在我看来,我没有业务域,对吗? 2)该规范告诉“用户对象,代表文档的所有者”,但我可以使用 Session 对象来确定正在处理触发器的用户电子邮件地址吗?
-
我已经用项目的一个触发器替换了所有用户的所有触发器,并发现 Session.getActiveUser().getEmail() 对于那些使用这个的用户不起作用(空白)文档已共享并且对我来说工作正常(我的电子邮件被退回)..
标签: google-apps-script google-sheets