gpt4 book ai didi

google-apps-script - Google 表格的活跃用户与有效用户

转载 作者:行者123 更新时间:2023-12-04 20:52:24 27 4
gpt4 key购买 nike

我正在编写一个简单的谷歌应用程序脚本应用程序,它根据请求页面的用户执行一些数据操作。

根据 google documentation对象 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.getActiveUser().getEmail(); 替换为 Session.getEffectiveUser().getEmail(); 和 BOOM - 它适用于其他人但对我不起作用...

怎么可能呢?有什么想法吗?

  • 我注意到,当我从 ScriptEditor 运行代码时,代码对所有用户来说就像一个魅力,但当它在 onOpen 触发时运行时,它的工作方式不可预测。

This spreadsheet is shared with several persons.

感谢任何帮助。

最佳答案

简答

代码运行了错误的语句,因为没有 break 语句来避免它们的执行,另一方面,对于消费者帐户 (gmail.com) getActiveUser 只会在事件用户运行脚本时返回一个值1.

1:https://developers.google.com/apps-script/reference/base/session#getActiveUser()

说明

您应该在每个 case 语句集的末尾添加 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

  • 当 testA@gmail.com 打开电子表格时添加第 1 行和第 2 行
  • 当 testB@gmail.com 打开电子表格时添加第 3 行和第 4 行
  • 当通过 testB@gmail.com 单击脚本编辑器的“运行”按钮触发 stript 时的第 6 行附加值
+---+------------+-------------------------------+-----------------+-----------------+
| | 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 |
+---+------------+-------------------------------+-----------------+-----------------+

关于google-apps-script - Google 表格的活跃用户与有效用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com