问题描述
我创建了一个Chrome扩展程序,该扩展程序利用了Google驱动器的应用程序特定数据:
https://developers.google.com/drive/api/v3/appdata
它正在按我希望的那样工作。现在,我希望从计算机上的节点服务器访问该数据。我发现此示例适用于Google驱动器和节点:
https://developers.google.com/drive/api/v3/quickstart/nodejs
该示例对我有用,但范围不同,列出了用户在驱动器上可见的文件。我要做的是访问Google驱动器上的应用程序特定数据,该数据是从我的第一个应用程序(Chrome扩展程序)创建的。
我不确定该怎么做。在完成第二个教程之后,第二个项目已添加到我的Google开发者控制台(https://console.developers.google.com)中。我在想,为了访问特定于应用程序的数据,我需要模仿nodejs应用程序在做什么,但是要使用不同的范围,并在开发人员控制台的第一个项目(最初是chrome扩展名)中使用它,也许添加第二个OAuth 2.0客户端ID。是对的吗?我还应该考虑其他步骤吗?
解决方法
在您的节点应用上,您需要使用来自同一项目的OAuth凭据来授权范围https://www.googleapis.com/auth/drive.appdata
,其中存储了特定于应用程序的数据。
这就是特定于应用程序的数据的意义:存储只能由创建该数据的同一应用程序访问的数据。凭据是标识应用程序的身份。
当心,这里的应用程序一词指的是为其创建凭据的GCP项目,而不是指您是在Chrome扩展程序,节点服务器上使用这些凭据还是拥有什么。无关紧要的是,存储过程是由Chrome扩展程序完成的,而存储过程是由节点应用程序进行的。在访问Drive API时,他们使用的是同一GCP项目中的凭据,这一事实将它们都标识为同一应用程序(我想这是由于“应用程序”一词的使用太常见了。) >
无论如何,完成OAuth流程后,要在应用程序数据文件夹中搜索文件,您必须将spaces
字段设置为appDataFolder
,然后调用{{3 }},如Files: list所示:
drive.files.list({
spaces: 'appDataFolder',fields: 'nextPageToken,files(id,name)',pageSize: 100
},function (err,res) {
if (err) {
// Handle error
console.error(err);
} else {
res.files.forEach(function (file) {
console.log('Found file:',file.name,file.id);
});
}
});