使用服务帐户密钥列出来自 google 驱动器的 publicly 共享文件未获取 public 文件
List publicly shared files from google drive using service account key not getting public files
我在使用服务帐户密钥和 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)
});
- 结果,尽管我公开共享了所有文件并授予所有人编辑权限,但我什么也没得到。
- 在服务帐户中,我启用了 google API 并授予了 qwner 权限。
- 我要列出所有公开共享的文件。
- 我的代码哪里错了。
请帮我解决这个问题。
谢谢:)
服务帐户不是您,而是虚拟用户。与任何用户一样,files.list 只会 return 它有权访问的文件。那是它创建的文件和某人与之共享的文件。虽然有人会认为每个人都可以访问 public 个文件。如果 files.list return 编辑了 Google 驱动器上所有设置为 public 的文件的列表,那将是一个巨大的列表并且不是很有用。
通过将文件设置为 public 如果您有文件 ID,您将能够使用 API 键查看它。您将无法对其进行编辑,但可以对其进行 file.get。
获取服务帐户电子邮件地址并转到 google 驱动器共享包含服务帐户文件的文件夹,就像您与任何其他用户一样。如果愿意,您还可以与服务帐户单独共享每个文件。
然后尝试做一个 files.list.
使用服务帐户电子邮件共享域范围的共享文件夹对我不起作用。
但是,我确实找到了这篇文章
(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
);
我在使用服务帐户密钥和 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)
});
- 结果,尽管我公开共享了所有文件并授予所有人编辑权限,但我什么也没得到。
- 在服务帐户中,我启用了 google API 并授予了 qwner 权限。
- 我要列出所有公开共享的文件。
- 我的代码哪里错了。
请帮我解决这个问题。 谢谢:)
服务帐户不是您,而是虚拟用户。与任何用户一样,files.list 只会 return 它有权访问的文件。那是它创建的文件和某人与之共享的文件。虽然有人会认为每个人都可以访问 public 个文件。如果 files.list return 编辑了 Google 驱动器上所有设置为 public 的文件的列表,那将是一个巨大的列表并且不是很有用。
通过将文件设置为 public 如果您有文件 ID,您将能够使用 API 键查看它。您将无法对其进行编辑,但可以对其进行 file.get。
获取服务帐户电子邮件地址并转到 google 驱动器共享包含服务帐户文件的文件夹,就像您与任何其他用户一样。如果愿意,您还可以与服务帐户单独共享每个文件。 然后尝试做一个 files.list.
使用服务帐户电子邮件共享域范围的共享文件夹对我不起作用。
但是,我确实找到了这篇文章
(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
);