【问题标题】:Apps Script Needs to Check Permissions and Request onOpenApps 脚本需要检查权限并请求 onOpen
【发布时间】:2021-11-02 01:51:08
【问题描述】:

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

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

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

  • 检查该单元格的值
  • 如果为假,则为用户弹出一个 UI 警报。

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

  • 提示用户权限
  • 为该用户添加 onOpen 和 onEdit 可安装触发器,以便其余的 我的应用程序在该用户与 电子表格。
  • 将隐藏单元格的值更改为“true”,以便简单的 onOpen() 触发器不会一直提示用户。

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

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

是否有其他方法可以检查活动用户是否已授权简单的 onOpen() 触发器所需的 OAuth 范围?

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

【问题讨论】:

    标签: google-apps-script google-sheets oauth-2.0 permissions


    【解决方案1】:

    您可以使用ScriptApp.getAuthorizationInfo()

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

    【讨论】:

    • 感谢 GoranK 提供的这种方法,但它似乎只能在已安装的触发器中工作。如果它由已安装的触发器运行,则它会正确指示活动用户是否已授予所需范围的授权。但是,如果它在像 onOpen() 这样的简单触发器中使用,那么即使用户已授权所有范围,它也会始终将授权状态显示为 REQUIRED。
    • 没错。简单的onOpen不能执行一些操作,需要使用installable onOpen
    猜你喜欢
    • 1970-01-01
    • 2014-01-20
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    相关资源
    最近更新 更多