【发布时间】:2019-05-28 12:24:22
【问题描述】:
我正在编写一个 Firebase 应用程序,我需要在运行 Node.js 的后端中进行一些更改
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
storageBucket: config.get("firebase.storage")
});
我从初始化 admin 中获得了存储桶,并且能够从该文件中看到现有的元数据。设置它不起作用:
const myfile = {URL: "/users/1/demo.png"}; //this file exists
const bucket = admin.storage().bucket();
const [metadata] = await bucket.file(redeemable.URL).getMetadata();
console.log(metadata); //this works
if (!metadata.metadata.whitelist) metadata.metadata.whitelist = {};
metadata.metadata.whitelist[req.user.userId] = true;
await bucket.file(myfile.URL).setMetadata(metadata);
firebase 管理员不应该有访问权限吗?我也没有收到任何错误。
【问题讨论】:
-
这里缺少太多信息。究竟是什么行不通?有错误吗?这里我们看不到的所有变量的值是多少?请尝试对值进行硬编码,以便我们可以看到您打算做什么。
-
setMetadata 不起作用。存储桶和文件(唯一的变量)是正确的我可以看到并 console.log 文件的元数据但是当我设置它时,它没有。官方文档中也缺少它。没有错误
-
元数据确实有效。如果没有看到您正在处理的所有确切值,Stack Overflow 无能为力。 stackoverflow.com/help/mcve
-
很遗憾听到权威人士说您确定它有效并且 SO 无能为力。你能告诉我你需要什么确切的值吗?文件字符串?我永远无法制作一个简单的示例,因为它需要我无法发布的谷歌存储服务器的访问代码。没有其他任何东西丢失。但它在他们的 Node.js 官方文档中丢失,并且只提到了从 gsutil 工具设置元数据。我确实添加了更多代码以使其更清晰。
-
当您说
console.log(metadata)有效时,它究竟做了什么符合您的期望?您传递给 setMetadata 的对象到底是什么样的?让我们将这段代码简化为对 setMetadata 的一次调用,看看它是否收到了您期望的数据。
标签: firebase google-cloud-storage firebase-storage