首页 > 解决方案 > Apps 脚本需要检查权限并请求 onOpen

问题描述

有没有办法从应用脚本中的 onOpen() 简单触发器检查 OAuth 权限?

我的应用程序创建并与我的用户共享电子表格,当他们打开电子表格时,我需要能够检查他们是否已经授权了所需的范围。简单的触发器不能在本地运行需要授权范围的函数。但是可安装的触发器可以。我创建了一个函数,它将提示用户授予权限,然后使用这些范围安装所需的触发器。我有一个自定义菜单项可以很好地运行此函数,但简单的 onOpen() 触发器无法运行该函数,因为它请求 OAuth 范围权限。我们的许多用户不会意识到他们需要从菜单中运行该功能才能使电子表格工作。

我最初的想法是在电子表格的某处有一个隐藏单元格,其真/假值以“假”开头。当用户打开电子表格时,onOpen() 简单触发器:

警报告诉他们使用 onOpen() 添加的自定义菜单,该菜单将运行以下功能:

这很好用! 但仅适用于访问电子表格的第一个用户。一旦他们授权权限,该隐藏单元格将变为“true”,后续用户将不会被提示运行菜单功能。

我的第二个想法是,与其将隐藏单元格设置为真/假值,不如将其设为已授予权限的用户 gmail 帐户列表(通过 访问Session.getActiveUser().getEmail())。但是为了获取当前用户的电子邮件,我需要一个 OAuth 范围!所以简单的 onOpen() 触发器甚至无法检查当前用户是否是新用户......

是否有另一种方法来检查活动用户是否已授权简单的 onOpen() 触发器所需的 OAuth 范围?

我不想仅仅依靠我的用户知道他们必须运行那个特殊的菜单功能才能让事情正常工作。

标签: google-apps-scriptgoogle-sheetsoauth-2.0permissions

解决方案


您可以使用ScriptApp.getAuthorizationInfo()

if (ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL).getAuthorizationStatus() == ScriptApp.AuthorizationStatus.NOT_REQUIRED) {
    // user has authorized the OAuth scopes
  }

推荐阅读