首页 > 解决方案 > Google 应用脚本 web 应用 getActiveUser.getEmail() 在部署为 USER_DEPLOYING 时不起作用

问题描述

我正在尝试创建一个将使用谷歌表格作为后端的网络应用程序。我想让用户能够访问网络应用程序并仅通过网络应用程序执行读/写操作。我不希望这些用户可以访问谷歌表格,因为我想限制他们可以通过网络应用程序读取的数据。我尝试使用USER_DEPLOYING作为执行方式,但这样做我无法获取正在使用网络应用程序的人的电子邮件。有什么办法可以实现我想要做的事情吗?

标签: google-apps-scriptgoogle-authentication

解决方案


问题:

出于安全原因,如果将 Web 应用部署到USER_DEPLOYING(即Execute the app as: Me)并且访问该 Web 应用的用户(即活动用户)与运行脚本的用户不属于同一 G Suite 域(即有效用户),脚本无权访问活动用户的电子邮件。

在脚本未经用户授权(简单触发器等)运行的任何上下文中都会发生同样的情况。

解释:

getActiveUser()的文档中:

获取有关当前用户的信息。如果安全策略不允许访问用户的身份,则 User.getEmail()返回一个空白字符串。电子邮件地址可用的情况各不相同:例如,用户的电子邮件地址在任何允许脚本在未经用户授权的情况下运行的上下文中都不可用,例如简单的 onOpen(e) 或 onEdit(e) 触发器、 Google 表格中的自定义函数,或部署为“以我身份执行”的网络应用程序(即由开发人员而非用户授权)。但是,如果开发者自己运行脚本或与用户属于同一个 G Suite 域,则这些限制通常不适用


推荐阅读