google-apps-script - Google 应用脚本 web 应用 getActiveUser.getEmail() 在部署为 USER_DEPLOYING 时不起作用
问题描述
我正在尝试创建一个将使用谷歌表格作为后端的网络应用程序。我想让用户能够访问网络应用程序并仅通过网络应用程序执行读/写操作。我不希望这些用户可以访问谷歌表格,因为我想限制他们可以通过网络应用程序读取的数据。我尝试使用USER_DEPLOYING
作为执行方式,但这样做我无法获取正在使用网络应用程序的人的电子邮件。有什么办法可以实现我想要做的事情吗?
解决方案
问题:
出于安全原因,如果将 Web 应用部署到USER_DEPLOYING
(即Execute the app as: Me
)并且访问该 Web 应用的用户(即活动用户)与运行脚本的用户不属于同一 G Suite 域(即有效用户),脚本无权访问活动用户的电子邮件。
在脚本未经用户授权(简单触发器等)运行的任何上下文中都会发生同样的情况。
解释:
从getActiveUser()的文档中:
获取有关当前用户的信息。如果安全策略不允许访问用户的身份,则 User.getEmail()返回一个空白字符串。电子邮件地址可用的情况各不相同:例如,用户的电子邮件地址在任何允许脚本在未经用户授权的情况下运行的上下文中都不可用,例如简单的 onOpen(e) 或 onEdit(e) 触发器、 Google 表格中的自定义函数,或部署为“以我身份执行”的网络应用程序(即由开发人员而非用户授权)。但是,如果开发者自己运行脚本或与用户属于同一个 G Suite 域,则这些限制通常不适用。
推荐阅读
- c# - C# 我可以延迟将数据库中的项目添加到 get 属性中吗?
- pandas - 删除重复项不适用于我导入的 csv 文件
- php - PHP取消设置多个数组,除了我想要的
- login - 如何在 Xamarin Forms 中使用社交帐户登录而不要求用户再次输入密码?
- java - 合并排序,在合并期间重新排列数组。爪哇
- android - 如何从 myapp 打开其他应用程序活动?
- c++ - 解析引用 | Exe/Dll 与 Lib
- php - FPDF 分节符
- hive - 为什么 hive 在 Join 操作期间不选择 SerDe JAR?
- javascript - 如何在节点中的多个文件之间同步缓存对象?