Google Apps 脚本错误 - 执行该操作需要授权

Mit*_*hun 3 google-apps-script

我创建了一个 Apps 脚本来替换 Google Doc 中的令牌。此应用程序脚本已部署为 API 可执行文件。我能够在没有任何授权错误的情况下在应用程序脚本编辑器中运行一个函数。但是,当从我的 Java Web 应用程序调用时,它有时会因授权错误而失败。我收到以下错误:

{
  "name": "replaceTokensInDoc",
  "done": true,
  "error": {
    "code": 3,
    "message": "ScriptError",
    "details": [
      {
        "@type": "type.googleapis.com/google.apps.script.v1.ExecutionError",
        "errorMessage": "Authorization is required to perform that action.",
        "errorType": "ScriptError"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我在多个地方读到我只需要在脚本编辑器中运行一个函数并提供解决这个问题的权限,但这对我来说没有帮助。当我在编辑器中运行一个函数时,它甚至不显示授权对话框,这意味着它具有所有必要的权限。它只是有时会失败。有人可以让我知道这种奇怪行为的原因吗?

Mit*_*hun 7

此错误的原因是当访问令牌expires_in时间小于 6 分钟时,Google Apps 脚本返回授权错误。Apps 脚本执行允许的最长时间为 6 分钟,因此它希望确保在执行 Apps 脚本时令牌不会过期。这是生产中的一个主要问题。这应该在文档中以粗体显示

Google 问题跟踪器中已经创建了一个问题。如果您遇到同样的问题,请给它加星号。

https://issuetracker.google.com/issues/36762863

在问题得到解决之前,解决方法是如果令牌在 360 秒内过期,则刷新令牌。

if (credential.getExpiresInSeconds() <= 360) {
    credential.refreshToken();
}
Run Code Online (Sandbox Code Playgroud)