在过去的一周里,我的谷歌应用程序脚本遇到了一个棘手的问题,我的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%的调用,到目前为止,我的解决方案只是重试,直到它成功。请注意,当我在后端代码中进行重试时,它没有解决问题,可能是因为“会话”本身有问题。如果它失败了一次,它也失败了所有的后续调用。因此,我在前端代码中实现了retry-循环(假设每个对后端的调用都被认为是一个新会话),并且在几次(最坏的情况5)重试之后,这起了作用。后端现在有一个简单的尝试捕获错误处理程序,它在发生故障时将状态(-1)返回给FE。
有什么根本原因吗?我的解决办法是太狡猾了不能忍受..。
提前感谢!
发布于 2020-07-30 02:51:58
我今天也遇到了同样的错误。对我来说,Session.getActiveUser().getEmail()是在我用脚本创建的动态网页上使用code.gs中定义的函数“code.gs”进行的,如下所示:
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}它似乎改变了这个
function include(filename) {
return HtmlService.createTemplateFromFile(filename).evaluate().getContent();
}把事情弄清楚了。我相信,当我将代码切换到气体中的新V8引擎时,错误就开始发生了。
编辑:哎呀,它第一次起作用了,但后来失败了。因此,我不得不将Session.getActiveUser().getEmail()移动到code.gs中
function getUserEmail() {
return Session.getActiveUser().getEmail()
}在网页上的javascript中,我不得不使用回调:
google.script.run.withSuccessHandler(function (email) {
document.getElementById("yourIDhere").innerHTML = email;
}).getUserEmail();一点也不漂亮,但它现在已经可靠地工作了。
https://stackoverflow.com/questions/60476462
复制相似问题