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

Posted

技术标签:

【中文标题】如何为上传到 Firebase 存储的文件生成访问令牌?【英文标题】:How can I generate access token to file uploaded to firebase storage? 【发布时间】:2020-04-13 09:39:50 【问题描述】:

我可以使用 firebase-admin 通过 nodejs 将文件上传到我的 firebase 存储桶,但是当我转到 firebase UI 时,我无法打开该文件。我注意到通过 firebase UI 上传的文件会自动生成访问令牌,但对于通过 nodejs 上传的文件则不会。

我已经尝试了几种方法,例如使用下载令牌设置元数据并在文件上传后公开文件。没有一个有效。

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

【问题讨论】:

你解决过这个问题吗? 【参考方案1】:

我使用下面的命令,它运行良好

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

【讨论】:

【参考方案2】:

截至 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 控制台点击新上传的文件,您的文件中应该有一个蓝色的、可点击的链接。您还可以在预览下方的文件位置下找到访问令牌。

例如:

【讨论】:

我用过这个,它有效。我只需要将导入行更改为const v4: uuidv4 = require('uuid');【参考方案3】:

为了进一步澄清@Rawan-25 的答案,您想要的是:

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

这是每个this Github 问题。

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

经过广泛搜索后,我设法通过一篇 reddit 帖子找到了答案,该帖子提到了另一个堆栈溢出帖子,哈哈。

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

【讨论】:

以上是关于如何为上传到 Firebase 存储的文件生成访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Azure Blob 存储中的文件夹生成共享访问签名?

在上传文件之前生成 Firebase 存储下载 url

如何为 Firebase 取消部署 Cloud Functions?

我们如何为 Firebase 存储编写依赖于 Firebase 实时数据库中的值的安全规则? [复制]

如何为 Google App Signing 生成上传密钥?

添加 Firebase 存储用户上传限制