google-apps-script - Apps 脚本需要检查权限并请求 onOpen
问题描述
有没有办法从应用脚本中的 onOpen() 简单触发器检查 OAuth 权限?
我的应用程序创建并与我的用户共享电子表格,当他们打开电子表格时,我需要能够检查他们是否已经授权了所需的范围。简单的触发器不能在本地运行需要授权范围的函数。但是可安装的触发器可以。我创建了一个函数,它将提示用户授予权限,然后使用这些范围安装所需的触发器。我有一个自定义菜单项可以很好地运行此函数,但简单的 onOpen() 触发器无法运行该函数,因为它请求 OAuth 范围权限。我们的许多用户不会意识到他们需要从菜单中运行该功能才能使电子表格工作。
我最初的想法是在电子表格的某处有一个隐藏单元格,其真/假值以“假”开头。当用户打开电子表格时,onOpen() 简单触发器:
- 检查该单元格的值
- 如果为假,则为用户弹出一个 ui 警报。
警报告诉他们使用 onOpen() 添加的自定义菜单,该菜单将运行以下功能:
- 提示用户权限
- 为该用户添加 onOpen 和 onEdit 可安装触发器,以便我的应用程序的其余部分在该用户与电子表格交互时适用于该用户。
- 将隐藏单元格的值更改为“true”,这样简单的 onOpen() 触发器就不会一直提示用户。
这很好用! 但仅适用于访问电子表格的第一个用户。一旦他们授权权限,该隐藏单元格将变为“true”,后续用户将不会被提示运行菜单功能。
我的第二个想法是,与其将隐藏单元格设置为真/假值,不如将其设为已授予权限的用户 gmail 帐户列表(通过 访问Session.getActiveUser().getEmail()
)。但是为了获取当前用户的电子邮件,我需要一个 OAuth 范围!所以简单的 onOpen() 触发器甚至无法检查当前用户是否是新用户......
是否有另一种方法来检查活动用户是否已授权简单的 onOpen() 触发器所需的 OAuth 范围?
我不想仅仅依靠我的用户知道他们必须运行那个特殊的菜单功能才能让事情正常工作。
解决方案
您可以使用ScriptApp.getAuthorizationInfo()
if (ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL).getAuthorizationStatus() == ScriptApp.AuthorizationStatus.NOT_REQUIRED) {
// user has authorized the OAuth scopes
}
推荐阅读
- video - 将 VFR 视频拆分为 CFR 块?
- mule - 在 Dataweave 2.0 中将属性从属性文件转换为 json
- go - 如何从2个具有相同名称的文本区域中获取值,并将其保存在切片中
- python - 如何同时等待多个条件,直到其中任何一个返回 true
- woocommerce - Woocommerce中如何拆分订单总量
- c# - Blazor (webasm) 应用中的 Azure 语音 SDK (C#) - 错误
- javascript - 程序不使用在另一个函数中调用的指定数字?谁能发现我在这里缺少的东西?
- reactjs - UseState 在更新后显示以前的值
- pandas - Python拟合线性高原曲线
- php - Laravel - Nexmo 没有在 .ENV 文件中获取凭据