我正在编写一个简单的谷歌应用脚本应用程序,它执行一些数据操作取决于请求页面的用户。
根据google documentation对象会话有 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();
会为用户返回错误的电子邮件。
对于创建脚本{1}}的第一个用户(我),返回正确的电子邮件,但对于所有其他用户,它也会返回我的电子邮件。
好的,我已决定将Session.getActiveUser().getEmail();
替换为Session.getActiveUser().getEmail();
和BOOM - 它适用于其他人,但对我不起作用...
怎么可能?有什么想法吗?
此电子表格与多人共享。
感谢任何帮助。
答案 0 :(得分:0)
代码发出错误的语句,因为没有break语句来避免它们的执行,另一方面,对于消费者帐户(gmail.com)getActiveUser只会在活动用户运行脚本时返回一个值 1
1 :https://developers.google.com/apps-script/reference/base/session#getActiveUser()
您应该在每个案例集的末尾添加break;
,否则下一个语句也将被执行。相反,请考虑以下内容进行测试。
function onOpen(){
myFunction('On open - simple trigger');
}
function onOpenInstallable(){
myFunction('On open - installable trigger');
}
function runFromScriptEditor(){
myFunction('Run - script editor');
}
function myFunction(context) {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var range = sheet.getRange(lastRow + 1,1,1,4);
var output = [[
new Date(),
context,
Session.getActiveUser().getEmail(),
Session.getEffectiveUser().getEmail()
]];
range.setValues(output);
}
所有者:testA@gmail.com
编辑:testB@gmail.com
+---+------------+-------------------------------+-----------------+-----------------+
| | A | B | C | D |
+---+------------+-------------------------------+-----------------+-----------------+
| 1 | Timestamp | Context | Active User | Effective User |
| 2 | 10/29/2016 | On open - simple trigger | testA@gmail.com | testA@gmail.com |
| 3 | 10/29/2016 | On open - installable trigger | testA@gmail.com | testA@gmail.com |
| 4 | 10/29/2016 | On open - simple trigger | | |
| 5 | 10/29/2016 | On open - installable trigger | | testA@gmail.com |
| 6 | 10/29/2016 | Run - script editor | testB@gmail.com | testB@gmail.com |
+---+------------+-------------------------------+-----------------+-----------------+