AppsScript在执行期间为每个用户存储唯一值



我试图存储由一个函数生成的数据,并在应用程序脚本中的另一个函数中检索它。该值对每个用户都是唯一的。我试过做userProperties,但这似乎不能正确地进行。这是可能的AppsScripts吗?

我在一个公开可编辑的google表格中运行这个。

例如:在一个指定的脚本中,当用户点击一个图像时,我们把它叫做"onButtonClick()",它从用户那里收集一些信息(比如"你最喜欢的cookie是什么)。

然后,在on-change事件(检查哪个单元格被更改)的触发器中,获取该用户保存的'favorite cookie'。

userProperties为文档的所有者保存可访问的数据,但是没有办法告诉当前用户的"最喜欢的cookie"是什么。没有可访问的唯一标识符。

似乎谷歌不会让脚本访问'机密信息'在一个触发器,如onChange/onEdit,即使脚本的OAuth范围是由用户授权的(通过初始按钮按收集最喜欢的cookie信息)。

如果我能从onChange/onEdit触发器中获得用户的唯一值,我会使用它…但触发器不会让这种情况发生。

编辑::它要求有一个最小的可重复的例子。为"https://www.googleapis.com/auth/userinfo.email">

设置OAuth范围apps脚本主体:

function doGetEmailPermissions(){
//button action to get user to trigger authorization from script.
var userInfo=Session.getActiveUser().getEmail();
if (userInfo!=null){
setProp("userId",userInfo);
SpreadsheetApp.getUi().alert('Thank you for verifying '+userInfo+"!");
}else{
SpreadsheetApp.getUi().alert("You must be logged in with a google account!");
} 
}
function doOnEdit(e){
//use neither method returns the editor's information
SpreadsheetApp.getUi().alert("Cell changed by:"+Session.getActiveUser().getEmail());
SpreadsheetApp.getUi().alert("Cell changed by:"+e.user);
}

为onEdit创建一个可安装的触发器来调用'doOnEdit'。在工作表中创建一个按钮,并分配脚本"doGetEmailPermissions"。单击该按钮将正确请求用户的授权以运行脚本,并使用用户的电子邮件进行响应。由文档所有者以外的任何人进行更改,将为email/user info返回空字符串。

获取和设置用户属性

function setProp(key,value) {
const ps = PropertiesService.getUserProperties();
ps.setProperty(key,value);
}
function getProp(key) {
const  ps = PropertiesService.getUserProperties();
return ps.getProperty(key);
}

最新更新