【问题标题】:Viewing documents uploaded to Drive using JWT in Node.js在 Node.js 中查看使用 JWT 上传到云端硬盘的文档
【发布时间】:2018-06-16 22:21:31
【问题描述】:

我正在构建一个网络门户,供用户上传文档,我的团队可以在 Google 云端硬盘中查看和编辑这些文档。出于这个原因,我使用 JWT 身份验证进行上传。

我相信代码有效,因为我从 Google API 获得了成功的响应。但是,我无法确定文档的存储位置或如何在 Drive UI 中查看它们。

例如,我尝试使用用于生成 JWT 凭据的同一帐户登录云端硬盘,但该文档不可见。

请帮助纠正我对此 Drive API 集成工作原理的理解。

【问题讨论】:

标签: google-drive-api


【解决方案1】:

解决方案是创建文档,然后将其与您自己的帐户共享,以便您可以在云端硬盘中查看文档。然而,当我第一次尝试这个时,我遇到了 API 不允许我转移所有权的几个问题。此外,我无法更改刚刚创建的文档的权限。因此,我能够授予编辑权限,并且必须在权限调用上实现重试逻辑。

var googleapis = require('googleapis').google;
var googleauth = require('google-auth-library');
var fs = require('fs');
var credentials = require('./credentials/google.json');

var Google = {};

Google.authorize = function() {
    return new Promise(function(resolve, reject) {
        var client = new googleauth.JWT({
            email: credentials.client_email,
            key: credentials.private_key,
            scopes: ['https://www.googleapis.com/auth/drive.file']
        });

        client.authorize(function(err, result) {
            if (err) {
                console.log("Google.authorize "+err);
                reject();
            } else {
                resolve(client);
            }
        });
    });
};

Google.getDrive = function(auth) {
    return googleapis.drive({
        version: 'v3',
        auth: auth
    });
};

Google.createFile = function(drive, fileName, mimeType, stream) {
    return new Promise(function(resolve, reject) {
        drive.files.create({
            requestBody: {
                name: fileName,
                mimeType: mimeType
            },
            media: {
                mimeType: mimeType,
                body: stream
            }
        }, null, function (err, result) {
            if (err) {
                console.log("Google.createFile "+err);
                reject();
            } else {
                var retry = function(id, waitTime) {
                    if (waitTime > 10000) {
                        reject();
                    }
                    setTimeout(function() {
                        drive.permissions.create({
                            fileId: id,
                            resource: {
                                role: "writer",
                                type: "user",
                                emailAddress: "YOUR-EMAIL-HERE"
                            }
                        }, {
                        }, function(err, result) {
                            if (err) {
                                console.log("Drive Permissions - Retrying after waiting "+waitTime);
                                retry(id, waitTime*2);
                            } else {
                                resolve(id);
                            }
                        });
                    }, waitTime);
                };

                var id = result.data.id;
                console.log("Uploaded ID " + id);
                retry(id, 1000);
            }
        });
    });
};

module.exports = Google;

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多