【问题标题】:You do not have permission to call "UrlFetchApp.fetch"您无权调用“UrlFetchApp.fetch”
【发布时间】:2019-10-12 23:25:46
【问题描述】:

我正在从谷歌电子表格中的脚本编辑器发送 http 请求,但我不断收到以下错误消息:

`Google Apps Script: You do not have permission to call UrlFetchApp.fetch. Required permissions: https://www.googleapis.com/auth/script.external_request`

我正在使用 onEdit 功能:

 function onEdit(e){
  var ui = SpreadsheetApp.getUi();
        var response = UrlFetchApp.fetch('http://www.eur-api.idomoo.com/');
    Logger.log(response.getContentText());
  } 

我不知道为什么会出现此错误?而且我还允许 script.external_request 范围,任何帮助将不胜感激。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    当用户更改电子表格中的值时,简单触发器会调用 onEdit。

    但是,简单的触发器无法访问需要授权的服务,例如UrlFetchApp.fetchSee the Google Apps Script guide

    您可以做的就是简单地将函数onEdit重命名为其他名称,例如atEdit,以便删除简单触发器。然后按照Current project's triggers菜单...

    并添加一个在On edit事件中调用的触发器。

    并且在创建触发器时,您将按照向导授予您的应用脚本连接到外部服务的权限。

    【讨论】:

    • 很好的解决方案,榆次!
    • 此菜单在我的应用脚本项目中不存在,这似乎已过时
    • @DimitriKopriwa 左侧栏提供项目触发器。
    • 谢谢!很难相信存在如此简单的解决方法! :D
    • 使用旧版编辑器,我什至不必更改我的 onOpen() 方法的名称。没有指定触发器,所以我为 onOpen() 添加了一个触发器,它起作用了。谢谢!
    【解决方案2】:

    我知道它是一个旧线程,但我觉得必须将方法重命名为其他名称很奇怪,例如从 onEdit 到 onEditHandler 只是为了让它工作。事实证明,我可以通过以下方式使其工作:

    1. 移除触发器。
    2. 重新添加触发器。

    这可能是因为之前处理程序没有获取 url,因此它不必请求授权来访问外部请求。重新添加后,它就会获得适当的授权,因为您需要重新授权处理程序。

    【讨论】:

      【解决方案3】:

      有两种方法可以解决这个问题

      我。更新您的清单并将"https://www.googleapis.com/auth/script.external_request" 行添加到oauthScopes

      {
        "timeZone": "Europe/Moscow",
        "oauthScopes": [
          ...
          "https://www.googleapis.com/auth/script.external_request"
        ],
        "dependencies": {
          ...
        },
        "exceptionLogging": "STACKDRIVER"
      } 
      

      二。或者从清单中完全删除 oauthScopes

      您可以在此处找到如何编辑清单 Manifests

      【讨论】:

        【解决方案4】:

        您需要授权您的脚本才能访问external_request 服务。如果您是项目的所有者,您应该能够通过运行并使用oauth 页面确认来授予访问权限。

        在此处阅读有关身份验证的更多信息:https://developers.google.com/apps-script/guides/services/authorization

        【讨论】:

        • 我得到了确认弹出窗口。已确认,但在此之后仍然没有运行。
        • 您是文档的所有者吗? @JGood 另一个问题可能是您使用 GSuite 帐户而不是 root gmail 帐户进行操作。
        • 感谢您的回复,雅科夫!我使用我的 GSuite 帐户进行操作,但我是域的所有者并创建了电子表格。你可以发送参考这是一个问题吗?我能够从 Yuci 那里得到答案来工作,但更希望像你的答案一样获得更全球的认可。作为参考,它弹出了oauth请求,但随后继续抛出异常。
        • @JGood 这是文档稀少的细节案例之一。我知道 GSuite 从启发式来看是有问题的。我确定文档存在于某处,但不是直截了当的某个地方。我很高兴被证明是错误的。
        【解决方案5】:

        尝试更改链接 https。

        查看他们的 api 文档:

        API 端点 Idomoo 的 API 2.0 有多个端点,都从多个根之一开始,具体取决于您希望将数据发送到和处理的区域:

        美国https://usa-api.idomoo.com/api/v2 欧盟https://eur-api.idomoo.com/api/v2

        【讨论】:

          猜你喜欢
          • 2015-08-15
          • 2018-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-04
          相关资源
          最近更新 更多