google-apps-script - Session.getActiveUser() 的随机权限/授权错误
问题描述
在过去的一周里,我的 google 应用程序脚本遇到了一个令人讨厌的问题,该脚本已经运行了好几年,至少有 500 个用户。
当我试图以这种方式获取当前用户的登录信息时:
var email_act = Session.getActiveUser().getEmail();
服务器抛出异常:
例外:您无权调用 Session.getActiveUser。所需权限:https ://www.googleapis.com/auth/userinfo.email at getUserInfo(UserFunctions:46:27)
在我的情况下,有效用户与活动用户不同,但在尝试调用 Session.getEffectiveUser() 时我也遇到了同样的错误。
这是随机发生的,大约 30% 的调用,到目前为止,我的解决方案只是重试直到成功。请注意,当我在后端代码中进行重试时,它并没有解决问题,可能是因为“会话”本身有问题。如果它失败了一次,它也会失败所有后续调用。因此,我在前端代码中实现了重试循环(假设每次对后端的调用都被视为一个新会话)并且这有所帮助 - 在几次(最坏的情况 5)重试之后它可以工作。后端现在有一个简单的 try-catch 错误处理程序,它会在失败的情况下将状态 (-1) 返回给 FE。
有什么想法可能是根本原因吗?我的解决方案太丑陋了,无法忍受......
提前致谢!
解决方案
我今天刚遇到同样的错误。对我来说,Session.getActiveUser().getEmail() 位于我使用脚本创建的动态网页上的脚本中,该脚本使用 code.gs 中定义的函数“include”,如下所示:
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
似乎将其更改为
function include(filename) {
return HtmlService.createTemplateFromFile(filename).evaluate().getContent();
}
已经把事情弄清楚了。我相信当我将代码切换到 GAS 中的新 V8 引擎时,错误开始发生。
编辑:哎呀,它第一次工作,但在那之后失败了。所以我不得不在 code.gs 中移动 Session.getActiveUser().getEmail()
function getUserEmail() {
return Session.getActiveUser().getEmail()
}
在网页上的 javascript 中,我不得不使用回调:
google.script.run.withSuccessHandler(function (email) {
document.getElementById("yourIDhere").innerHTML = email;
}).getUserEmail();
一点也不漂亮,但它现在可以可靠地工作。
推荐阅读
- timestamp - 查找包含异常值的两个数据集之间的偏移量
- python - np.roll 不翻边
- python - 保存/加载带有模式的匹配器作为新的管道组件
- netlogo - 如何让补丁“属于”乌龟
- ios - 列表滚动后计时器中断
- python - tkinter(python)中的文件夹路径问题
- javascript - Nextjs 中的 Styled-components 延迟设置属性
- wso2 - 无法在 WSO2 API Manager 3.0.0 的服务提供者下配置 SAML2 Web SSO 配置
- javascript - 滚动条高度
- chef-infra - Chef 是否在行数中包含注释