google-apps-script - Session.getActiveUser().getEmail() 在创建侧边栏和从模板化 html 调用 appscript 方法时给出两个值
问题描述
我一直在使用https://github.com/labnol/apps-script-starter作为为 Google 幻灯片创建应用脚本项目的入门指南。
但是我遇到了一个与调用 appscript 函数的上下文(活动用户)相关的问题。在 onOpen() 函数中调用方法 Session.getActiveUser().getEmail() 时,我得到了正确的活动帐户,但是当我从模板化的 HTML 中调用相同的函数时,我得到了该浏览器的默认帐户。有人遇到过这个问题吗?一个解决方案会很棒。
const onOpen = (e) => {
Logger.log(Session.getActiveUser().getEmail());
Logger.log(Session.getEffectiveUser().getEmail());
..
}
const customFunction = () => {
Logger.log(Session.getActiveUser().getEmail());
Logger.log(Session.getEffectiveUser().getEmail());
..
}
const showSidebar = () => {
const template = HtmlService.createTemplateFromFile('gra-main-v3');
template.include = include;
const html = template.evaluate().setTitle('New Sidebar');
SlidesApp.getUi().showSidebar(html);
};
gra-main-v3.html
<HTML>
...
<script>
google.script.run.customFunction();
</script>
..
</HTML>
我有两个谷歌帐户登录到同一个浏览器 emailA@gmail.com(默认)和 emailB@gmail.com。使用默认帐户时,一切都按预期工作,但使用第二个帐户时,从模板化 HTML 调用的自定义函数会给出错误的结果。
Case 1 When emailA@gmail.com is active:
Results in onOpen = emailA@gmail.com
Results in customFunction = emailA@gmail.com
Case 2 When emailB@gmail.com is active:
Results in onOpen = emailB@gmail.com
Results in customFunction = emailA@gmail.com
appscript.json
{
"timeZone": "Asia/Calcutta",
"runtimeVersion": "V8",
"dependencies": {
"enabledAdvancedServices": [],
"libraries": []
},
"webapp": {
"access": "ANYONE",
"executeAs": "USER_ACCESSING"
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/script.container.ui",
"https://www.googleapis.com/auth/presentations.currentonly",
"https://www.googleapis.com/auth/presentations",
"https://www.googleapis.com/auth/userinfo.email"
]
}
解决方案
这是一个多帐户登录问题。请导航到问题跟踪器上的相应问题并加注星标,以便 Google 知道解决问题很重要。
同时提出了一些变通办法,它们都归结为提醒用户存在多帐户问题:
这个想法是将有效用户与当前用户进行比较,或者将文档所有者与当前用户进行比较,如果它们不同,则提醒用户他们需要退出其他帐户。
这是我们目前能做的最好的事情。
推荐阅读
- java - 如何在android java中使用jetpack导航和bottomNavigationView
- java - 如何正确使用 while-loop 用用户输入填充 2 个 Arraylist?
- css - cucumber-protactor-typescript 通过 css 设置睡眠和元素的正确方法
- sql-server - 更改 proc 尝试启动分布式事务
- java - 为什么在 threadlocal 中使用序列化程序会导致 kafka 生产者内存泄漏?
- php - 使用 AJAX 与搜索框相结合的分页
- amazon-web-services - 如何使用新的 CORS 规则更新 S3 存储桶中的文件
- mysql - mysql服务器的初始用户数据
- database - ecto 表未创建
- swift - 如何从 Vapor 3 单元测试的响应中访问原始内容?