代码之家  ›  专栏  ›  技术社区  ›  Abhi Thakkar

使用服务帐户密钥列出google drive中的公共共享文件,但不获取公共文件

  •  2
  • Abhi Thakkar  · 技术社区  · 6 年前

    在使用服务帐户密钥和驱动器时,我在编写代码时遇到了一个问题。文件夹。列表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,并授予QOwner权限。
    • 我要列出所有公开共享的文件。
    • 在代码中我错了。

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

    2 回复  |  直到 6 年前
        1
  •  3
  •   Linda Lawton - DaImTo    6 年前

    服务帐户不是你的,而是一个虚拟用户。就像任何用户一样,一个文件。列表将只返回其有权访问的文件。这是它创建的文件和有人与它共享的文件。有人会认为每个人都可以访问公共文件。如果有文件。list返回了Google drive上设置为public的所有文件的列表,这将是一个巨大的列表,并不是很有用。

    通过将文件设置为public(如果您有文件id),可以使用API密钥查看该文件。你将无法编辑它,但你将能够做一个文件。快点。

    取下服务帐户的电子邮件地址,进入google drive,像其他用户一样,与服务帐户共享包含文件的文件夹。如果愿意,您还可以与服务帐户单独共享每个文件。 然后试着做一个测试。列表

        2
  •  0
  •   Mike M    4 年前

    与服务帐户电子邮件共享域范围的共享文件夹对我不起作用。
    但是,我确实找到了这篇文章 ( https://nilsnh.no/2018/12/17/how-to-implement-domain-wide-delegation-in-gsuite-using-node.js ) 这就解释了,您可以将“要模拟的电子邮件地址”传递给google的subject参数。啊。JWT电话。现在就好像你是以那个用户的身份登录的。您可能应该为此创建一个特定的域用户。此专用用户将没有任何个人驱动器文件,但它将允许您访问域范围的共享驱动器,而无需使用该用户的密码。

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