【问题标题】:Google spreadsheet api Request had insufficient authentication scopesGoogle 电子表格 api 请求的身份验证范围不足
【发布时间】:2016-07-22 20:29:48
【问题描述】:

我正在制作一个脚本来使用 nodejs 上的以下脚本从谷歌电子表格中读取数据:

var url = oauth2Client.generateAuthUrl({
    access_type:     'offline',
    approval_prompt: 'force',
    scope: [
      'https://www.googleapis.com/auth/analytics.readonly',
      'https://www.googleapis.com/auth/drive',
      'https://www.googleapis.com/auth/spreadsheets'
    ]
});
global.googleapis = { expiry_date: 0 };
google.options({ auth: oauth2Client });
var sheets    = google.sheets('v4');
sheets.spreadsheets.get({ spreadsheetId: 'id'}, function(err, data) {
    res.send(err, data);
});

但在每次获取请求时,我都会收到此错误:

Request had insufficient authentication scopes.

我检查了 Google 开发者控制台以启用 Google Drive API,它已启用,所以我真的不知道它会是什么。

【问题讨论】:

    标签: node.js google-api google-spreadsheet-api


    【解决方案1】:
    1. 首先删除凭据文件~/.credentials/sheets.googleapis.com-nodejs-quickstart.json(取决于您的设置)

    2. 更改用于从 Google 电子表格读取单元格的范围变量

    变量范围 = ['https://www.googleapis.com/auth/spreadsheets.readonly'];

    var SCOPES = ['https://www.googleapis.com/auth/spreadsheets'];

    1. 代码执行后,API 会再次进行身份验证,然后问题就解决了。

    【讨论】:

    • 这以最直接的方式回答了问题(并解释了为什么首先会发生错误)!
    • 您不必删除 credentials.json,只需删除 token.js 并更改 nodejs 项目中的范围。然后你需要再次做那个链接认证。
    • 删除 json 文件什么都不做。我不得不删除 token.json 目录而不是 json 凭证文件。现在它确实有效了。
    • 这缓解了巨大且日益严重的头痛。谢谢,Long 和 J-Ho!
    • 我的驱动器上没有凭据文件 - 我的代码正在 Google 服务器上执行,因为它是用 Google Apps 脚本编写的 - 高级 Classroom API 已打开。尽管脚本绑定到电子表格,但不涉及电子表格。这些信息对我来说毫无意义。
    【解决方案2】:

    范围看起来不错,也许您应该尝试删除之前存储在 /Users/yourUserName/.credentials/sheets.googleapis.com-projectName/* 中的凭据,然后再次执行应用程序以获取新凭据。

    【讨论】:

      【解决方案3】:

      从令牌文件夹中删除令牌并重试。如果您在运行电子表格快速入门之前尝试运行 Google 云端硬盘快速入门,则现有令牌可能没有更新电子表格访问权限。

      【讨论】:

        【解决方案4】:

        首先,确保您还在开发者控制台中启用表格 API

        insufficient authentication scopes 是请求中提供的 OAuth 2.0 令牌中的错误,指定 scopes 不足以访问请求的数据。

        因此,请确保您使用正确且所有必要的范围,如果您正确遵循此处的步骤,请检查此Authorizing requests with OAuth 2.0

        最后,尝试撤销访问并尝试重做。

        有关更多信息,请查看此相关 SO 问题:

        【讨论】:

          【解决方案5】:

          在我的情况下,在与我的程序相同的工作目录中创建了一个 token.pickle 文件,我还在同一目录中创建了我的 credentials.json 文件,我所做的只是删除了 token.pickle 文件,然后更改了范围,然后再次运行它,它会再次在您的浏览器中请求身份验证,就是这样,它可以工作了。

          我的代码 sn-p 如下所示,我正在创建一个泡菜文件,所以我必须在更改范围之前将其删除

              if os.path.exists('token.pickle'):
              with open('token.pickle', 'rb') as token:
                  creds = pickle.load(token)
              # If there are no (valid) credentials available, let the user log in.
              if not creds or not creds.valid:
                  if creds and creds.expired and creds.refresh_token:
                      creds.refresh(Request())
                  else:
                      flow = InstalledAppFlow.from_client_secrets_file(
                          'credentials.json', SCOPES)
                      creds = flow.run_local_server()
                  # Save the credentials for the next run
                  with open('token.pickle', 'wb') as token:
                      pickle.dump(creds, token)
          

          【讨论】:

            【解决方案6】:

            更新范围时也出现了同样的问题。随着说明,我删除了与python脚本相同目录下的token.json文件,然后身份验证范围问题就消失了。

            【讨论】:

              【解决方案7】:

              我一直在寻找凭证位置。很多论坛提到它会在 c:\users\.credentials\google-api****.json 下,但我在任何地方都找不到它们。然后我发现我的程序在 program .py 目录中创建了一个 token.pickle 文件,该文件本质上是凭证文件。

              【讨论】:

                【解决方案8】:

                另外请检查您工作区中已安装的 googleapis 版本,因为最新版本 (51) 不支持 Node 8。因此您需要降级其版本。 https://github.com/googleapis/google-api-nodejs-client/releases

                【讨论】:

                  【解决方案9】:

                  正如@herrogokunaruto 所述,确保工作区文件夹中不存在 token.pickle 文件

                  【讨论】:

                    【解决方案10】:

                    就我而言(Java + IntellijIdea)我删除了一个文件:~/IdeaProjects/projectName/tokens/StoredCredential 并重新启动了代码。

                    这个文件夹是用GoogleAuthorizationCodeFlow.Builder创建的,所以可能不同,但文件应该是一样的。

                    重新启动后,我再次切换到快速入门页面进行访问管理 - 为用户授予所有访问权限并关注。

                    之后,对我来说一切都很好

                    【讨论】:

                      【解决方案11】:

                      当 OAuth 弹出窗口打开以询问 google 帐户权限时,选择适当的权限授予对 google 表格读取、编辑等的访问权限

                      【讨论】:

                      • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
                      猜你喜欢
                      • 2021-11-22
                      • 1970-01-01
                      • 2016-06-21
                      • 1970-01-01
                      • 2016-04-28
                      • 1970-01-01
                      • 2021-12-12
                      • 2023-03-13
                      • 2021-10-20
                      相关资源
                      最近更新 更多