Node.js-Can';我无法从Google Drive API访问我的帐户
我需要以编程方式修改我的Google Drive,以创建文件夹并将一组文件上载到其中,然后在需要时删除该根文件夹并重做整个过程 我创建了一个具有服务帐户的项目,然后下载了JSON并将其存储在我的计算机上。Node.js-Can';我无法从Google Drive API访问我的帐户,node.js,authentication,error-handling,google-drive-api,service-accounts,Node.js,Authentication,Error Handling,Google Drive Api,Service Accounts,我需要以编程方式修改我的Google Drive,以创建文件夹并将一组文件上载到其中,然后在需要时删除该根文件夹并重做整个过程 我创建了一个具有服务帐户的项目,然后下载了JSON并将其存储在我的计算机上。 接下来,我跟着 我最终得到了以下代码: const auth=wait google.auth.getClient({ 凭据:需要(pathToServiceAccountJSON), 作用域:“https://www.googleapis.com/auth/drive" }); const
接下来,我跟着 我最终得到了以下代码:
const auth=wait google.auth.getClient({
凭据:需要(pathToServiceAccountJSON),
作用域:“https://www.googleapis.com/auth/drive"
});
const drive=wait google.drive({version:“v3”,auth});
驱动器文件
.创造({
资源:{
名称:filename,
mimeType:“application/vnd.google apps.folder”,
家长:[家长ID]
}
})
.then(result=>console.log(“SUCCESS:,result))
.catch(控制台错误);
但是,执行它会导致引发以下错误:
{
...
错误:[{
域名:“全球”,
理由:“禁止”,
信息:“禁止”
}]
}
首先,如果你迷路了,这可能比教程要好
其次,要访问您的驱动器,您必须在应用程序中请求适当的作用域,并且必须通过访问将在授权过程中提供的URL来授权应用程序请求的权限(作用域) 要使用服务帐户模拟用户(如您自己或域中的任何其他人),您需要启用服务帐户并启用域范围的委派,要做到这一点,您需要拥有一个G套件帐户[1]。如果是这种情况,在库示例[2]中,您需要在构造JWT对象时添加要模拟的用户作为第5个参数:
const {JWT} = require('google-auth-library');
const keys = require('./jwt.keys.json');
async function main() {
const client = new JWT(
keys.client_email,
null,
keys.private_key,
['https://www.googleapis.com/auth/cloud-platform'],
'userToImpersonate@example.com'
);
const url = `https://dns.googleapis.com/dns/v1/projects/${keys.project_id}`;
const res = await client.request({url});
console.log(res.data);
}
如果您没有G Suite帐户,只需按照快速入门[3]步骤获取驱动器服务,然后使用它发出创建请求
[1]
[2]
[3] 您能否提供复制错误的整个脚本?当然,请删除您的个人信息。我可以为此使用服务帐户吗?或者我必须使用OAuth来访问我的数据?答案肯定是两者都有,但我不确定你所说的“服务帐户”是什么意思。你授予应用程序的权限来源于你的帐户(这样,任何想要运行应用程序并将其连接到驱动器的人都必须自己授予它权限。)好吧,当我尝试执行
const时{data:{files}}=wait drive.files.list();
-代码确实成功执行。但是,文件
仅包含对入门.pdf
文件的引用。我没有G套件帐户。相反,我可以将OAuth 2.0与我的帐户一起使用,这样我就可以进行身份验证。除非出于某种原因,我的代码仍然不允许我这样做。您是否遵循快速入门?是吗你有错误吗?你必须生成一个credenditals.json,但不能从服务帐户生成。我遵循了它,它神奇地工作了。现在,我需要以某种方式从示例中提取与我相关的代码片段,只有listFiles
函数是不相关的,你可以将其替换为你的que中已有的代码片段从你声明的代码> const驱动器> /CODE >到最后。这就是我的意思,用驱动器服务(驱动器常量)你可以制作任何驱动API请求(在这种情况下创建请求)。我希望你能找出它。如果它帮助你,请考虑接受。