我正在制作一个脚本,使用nodejs上的以下脚本从谷歌电子表格中读取数据:
Office.context.document.settings.refreshAsync(function (asyncResult) {
var taskpaneVal = asyncResult.value.get("backgroundColor");
});
但是在每次获取请求时我都会收到此错误:
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);
});
我查看了Google开发者控制台以启用Google Drive API并启用了它,所以我真的不知道它会是什么。
答案 0 :(得分:30)
首先删除凭据文件~/.credentials/sheets.googleapis.com-nodejs-quickstart.json
(取决于您的设置)
更改用于从Google电子表格中读取单元格的范围变量
var SCOPES = [ 'https://www.googleapis.com/auth/spreadsheets.readonly'];
到
var SCOPES = ['https://www.googleapis.com/auth/spreadsheets'];
答案 1 :(得分:19)
范围看起来不错,也许您应该尝试删除先前存储在/Users/yourUserName/.credentials/sheets.googleapis.com-projectName/*
中的凭据,然后再次执行应用程序以获取新凭据。
答案 2 :(得分:5)
首先,请确保您还在开发者控制台中启用了表格API 。
insufficient authentication scopes
是请求中提供的OAuth 2.0令牌中的错误,指定scopes不足以访问请求的数据。
因此,请确保使用正确且所有必要的范围,如果您正确执行此处的步骤,请检查此Authorizing requests with OAuth 2.0。
最后,尝试撤消访问权限并尝试重做它。
有关详细信息,请查看此相关的SO问题:
答案 3 :(得分:0)
更新范围时发生了相同的问题。连同说明一起,我使用python脚本删除了同一目录下的token.json文件,然后身份验证范围问题就消失了。
答案 4 :(得分:0)
我一直在寻找凭证位置。很多论坛都提到它将在c:\ users \ .credentials \ google-api ****。json下,但我在任何地方都找不到它们。然后我发现我的程序在 program .py 目录中创建了一个 token.pickle 文件,该文件本质上是凭证文件。
答案 5 :(得分:0)
在我的情况下,在与程序相同的工作目录中创建了token.pickle文件,我的凭据.json文件也位于同一目录中,我所做的全部是删除了token.pickle文件,然后更改了范围,然后再次运行它,它将再次要求您在浏览器中进行身份验证,就可以了。
我的代码段如下所示,我正在创建一个pickle文件,因此必须在更改范围之前将其删除
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 :(得分:0)
从令牌文件夹中删除令牌,然后重试。如果您尝试在运行电子表格快速入门之前先运行Google云端硬盘快速入门,则现有令牌可能未更新电子表格访问权限。
答案 7 :(得分:0)
还请检查工作区中googleapis的安装版本,因为最新版本(51)不支持Node8。因此,您需要降级其版本。 https://github.com/googleapis/google-api-nodejs-client/releases
答案 8 :(得分:0)
如@herrogokunaruto所述,确保工作空间文件夹中不存在token.pickle文件
答案 9 :(得分:0)
就我而言(Java + IntellijIdea),我删除了一个文件:~/IdeaProjects/projectName/tokens/StoredCredential
并重新启动了代码。
这个文件夹是用 GoogleAuthorizationCodeFlow.Builder
创建的,所以可能不同,但文件应该是一样的。
重新启动后,我再次切换到 Quickstart 页面进行访问管理 - 为用户提供所有访问权限并关注。
在那之后,一切对我来说都很好