如何为上传到 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 取消部署 Cloud Functions?
我们如何为 Firebase 存储编写依赖于 Firebase 实时数据库中的值的安全规则? [复制]