首页 > 解决方案 > 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-apps-scriptgoogle-slides

解决方案


这是一个多帐户登录问题。请导航到问题跟踪器上的相应问题并加注星标,以便 Google 知道解决问题很重要。

同时提出了一些变通办法,它们都归结为提醒用户存在多帐户问题:

  1. 通过罗曼维拉德
  2. 跟踪器中的评论 117

这个想法是将有效用户与当前用户进行比较,或者将文档所有者与当前用户进行比较,如果它们不同,则提醒用户他们需要退出其他帐户。

这是我们目前能做的最好的事情。


推荐阅读