如何生成对上传到Firebase存储的文件的访问令牌?

时间:2019-12-21 00:23:21

标签: node.js firebase firebase-storage firebase-admin

我可以使用firebase-admin通过nodejs将文件上传到我的Firebase存储桶中,但是当我进入Firebase UI时,无法打开文件。我注意到通过firebase UI上传的文件将自动生成一个访问令牌,但是对于通过nodejs上传的文件则没有。

我已经尝试了几种方法,例如设置带有下载令牌的元数据以及在文件上传后将其公开。没有一个起作用。

如何通过API调用生成访问令牌,而不必转到hi并单击为每个上传的文件生成令牌?

5 个答案:

答案 0 :(得分:3)

要进一步阐明@ Rawan-25的答案,您想要的是:

bucket.upload(filename, {
  destination,
  metadata: {
      metadata :{
        firebaseStorageDownloadTokens: uuidv4(),
     }
  },
})

这是根据this Github问题。

答案 1 :(得分:3)

截至2020年7月的完整答案:

将文件上传到Firebase Cloud Storage(又名Google Cloud Storage)时,可以生成uuid并将其用作令牌

首先导入此软件包:

const uuidv4 = require('uuid/v4');

const { v4: uuidv4 } = require('uuid');

然后,在上传文件之前生成一个唯一的ID:

const uuid = uuidv4();

最后,上传您的文件:

最重要的是嵌入

metadata: { firebaseStorageDownloadTokens: uuid, }
上传函数的元数据字段中的

await admin.storage().bucket().upload(filePath, {
                            destination: thumbFilePathForUpload,
                            metadata: {
                                metadata: {
                                    firebaseStorageDownloadTokens: uuid,
                                }
                            },
                        });

为了检查它是否有效,请直接从Firebase控制台单击新上载的文件,您的文件上应有一个蓝色的可单击链接。您还可以在预览的正下方文件位置下找到访问令牌。

例如:

enter image description here

答案 2 :(得分:2)

我使用以下命令,它运行正常

    const uuidv4 = require('uuid/v4');
    const uuid = uuidv4();
    metadata: { firebaseStorageDownloadTokens: uuid }

答案 3 :(得分:0)

当前无法使用Firebase Admin SDK生成访问令牌。您必须使用其中一个客户端SDK以及StorageReference对象上的getDownloadUrl方法来执行此操作。该令牌仅真正用于Firebase客户端应用程序。

但是,您无法在Firebase控制台中加载使用Admin SDK上传的文件的预览是一个已知问题,而不是控制台的预期工作方式。 Firebase团队知道这一点,但是您仍然应该file a bug report anyway with Firebase support知道他们知道您受到此问题的影响。

答案 4 :(得分:0)

经过广泛的搜索后,我设法通过引用另一个堆栈溢出帖子大声笑的reddit帖子获得了答案。

请查看答案#2! Get Download URL from file uploaded with Cloud Functions for Firebase