使用服务帐号密钥列出 Google 云端硬盘中的公开共享文件,但不会获取公开文件



我在编码时遇到了问题,在使用服务帐户密钥和使用 drive.files.list API 时,我无法获取文件,尽管我已经公开共享了所有文件

const { google } = require('googleapis');
const drive = google.drive('v3');
const jwtClient = new google.auth.JWT(
client_email,
null,
private_key,
['https://www.googleapis.com/auth/drive']
);
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
} else {
console.log("Successfully connected!");
}
});

// List Drive files.
drive.files.list({
auth: jwtClient,
// fields: "files",
includeRemoved: false,
spaces: 'drive'
}, (listErr, resp) => {
if (listErr) {
console.log(listErr);
return;
}
console.log("Result ========>", resp.data.files)
});
  • 结果,尽管我已经公开共享了所有文件并赋予了所有人编辑权,但我一无所获。
  • 在服务帐户中,我启用了谷歌 API 并授予了 qwner 权限。
  • 我希望列出所有公开共享的文件。
  • 我在代码中错的地方。

请帮帮我解决这个问题。 谢谢:)

服务帐户不是您,而是虚拟用户。 与任何用户一样,files.list 只会返回它有权访问的文件。那是它创建的文件和某人与之共享的文件。虽然人们会认为每个人都可以访问公共文件。 如果 files.list 返回了 Google 驱动器上设置为公开的所有文件的列表,那将是一个巨大的列表,不是很有用。

如果您有文件 ID,通过将文件设置为公共,您将能够使用 API 密钥查看它。 您将无法编辑它,但您将能够对其进行 file.get 操作。

获取服务帐号电子邮件地址,然后转到Google云端硬盘,像使用任何其他用户一样,与服务帐号共享包含文件的文件夹。 如果您愿意,还可以与服务帐户单独共享每个文件。 然后尝试做一个文件列表。

使用服务帐号电子邮件共享全网域共享文件夹对我不起作用.
但是,我确实找到了这篇文章 (https://nilsnh.no/2018/12/17/how-to-implement-domain-wide-delegation-in-gsuite-using-node.js( 这解释了您可以将"要模拟的电子邮件地址"传递给google.auth.JWT调用的主题参数。现在就像您以该用户身份登录一样。 为此,您可能应该创建一个特定的域用户。 此专用用户不会拥有任何个人云端硬盘文件,但您可以访问全网域范围的共享云端硬盘,而无需使用该用户的密码。

const emailAddressToImpersonate = 'sharedDriveAccess@myworkspacedomain.com'
const jwtClient = new google.auth.JWT(
client_email,
null,
private_key,
['https://www.googleapis.com/auth/drive'],
emailAddressToImpersonate
);

相关内容

最新更新