NodeJS:从用户 Google Drive 下载文件
Posted
技术标签:
【中文标题】NodeJS:从用户 Google Drive 下载文件【英文标题】:NodeJS: Download file from users Google Drive 【发布时间】:2021-10-24 07:12:29 【问题描述】:嗨,
这可能比实际更理论,但我迷路了,我无法想象我是唯一的。
我尝试实现的是从现在到每天结束时从用户的 Google Drive 下载文件(在这种情况下为 XLXS),无需重新验证。
我在积分方面做了什么:
按照教程编写代码(现在应该不需要代码本身) 作为用户,我在 Google Cloud Platform 上创建了一个新项目 作为用户,我要求提供 Drive API 密钥 我有两个访问权限,分别访问一个服务帐户和 OAuth 客户端,并且正在使用 OAuth软件的其中一个部分是一个 JSON 文件,其中包含我填写的凭据(credentials.json)。
当我第一次运行它时,Google API 在控制台中告诉我:
Authorize this app by visiting this url: https://accounts.google.com/o/oauth2/ ...
和
Enter the code from that page here:
当我在用户登录时在浏览器中打开 URL 时,我必须授予用户对项目应用程序的访问权限,完成后我会得到一个密钥。当我输入终端的密钥时,会生成一个新的 json 文件 - token.js 瞧,一切正常。
文件下载完毕。
但这就是乐趣的开始: 几天后我的令牌过期了,我收到一个错误:
error: 'invalid_grant',
error_description: 'Token has been expired or revoked.'
所以我必须删除token.json,并按照上面提到的步骤创建一个新的。 (URL、授权、复制粘贴密钥、生成令牌)。
但这就是问题所在 - 我必须手动执行此操作,因为我必须授予权限,并且我必须将密钥复制到控制台中。
这就是问题所在 - 我不知道如何解决这个问题。关于这个问题,我已经阅读了一半的互联网,但我发现最好的是它,因为被授予权限的“项目应用程序”没有被释放,它处于测试阶段,这就是为什么权限只持续几天。多哈。我尝试将应用程序投入生产,但它需要我提供大量需要完成的项目列表,然后我才能这样做......我仍然觉得这有点矫枉过正......我不希望应用程序公开或什么不是……
我错过了什么吗?是否有一种简单的方法可以通过 NODE.JS 从 Google Drive 访问自己的文件并保存它们?就像使用 API 密钥一样简单 - 从现在开始到结束时间都完成了吗?
谢谢
奥利弗
【问题讨论】:
【参考方案1】:您应该对服务器端应用程序使用身份验证流程。当访问令牌过期时,您应该使用返回的refresh token
来获取新的access token
。
见Refreshing an access token (offline access)。
来自上述文档:
要刷新访问令牌,您的应用会向 Google 的授权服务器 (https://oauth2.googleapis.com/token) 发送一个 HTTPS POST 请求,其中包含以下参数:
client_id -> The client ID obtained from the API Console.
client_secret -> The client secret obtained from the API Console.
grant_type -> As defined in the OAuth 2.0 specification, this field's value must be set to refresh_token.
refresh_token -> The refresh token returned from the authorization code exchange.
特别注意“grant_type”,因为它必须设置为“refresh_token”。
【讨论】:
以上是关于NodeJS:从用户 Google Drive 下载文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 REST api 从 Google Drive 下载图片
Google Drive 范围 drive.file 不足以将应用拥有的文件复制到应用用户的 Google Drive
使用 Android Studio 中的 Google Drive API 从驱动器下载文件以上传到另一个驱动器