gpt4 book ai didi

firebase - 无法获取 Firebase 存储安全规则来拒绝访问文件

转载 作者:行者123 更新时间:2023-12-02 19:04:29 25 4
gpt4 key购买 nike

我确信我遗漏了 Firebase 存储规则的某些内容,但我已执行以下操作:

第 1 步

首先,我设置了以下 Firebase 存储规则:

service firebase.storage {
match /b/{bucket}/o {
match /items/{dev_key}/{perm_id}/{file_name} {
allow write: if request.auth.uid == dev_id;
allow read: if request.auth.token.permId == perm_id;
}
}
}

我希望只有具有与相关位置匹配的自定义声明 permId 的登录用户才能下载该文件,允许读取:if request.auth.token.permId == perm_id;

因此,我在用户上设置了 custom claim in Cloud Functions,如下所示:

第 2 步

    admin.auth().setCustomUserClaims(uid, {permId: '1'}).then(() => {
// send off some triggers to let user know the download is coming
admin.database().ref(`collection/${uid}/${itemId}`).update({
downloadReady: true
});
});

然后我退出用户并再次登录...这设置了自定义声明。我检查了它们在 Cloud Functions 中的设置,如下所示:

第三步

admin.auth().verifyIdToken(idToken).then((claims) => {
console.log("--------------claims -------------");
console.log(JSON.stringify(claims));
});

我在声明字符串中看到... permID: "1"

然后,我在客户端请求了一个 downloadURL(希望这就是我出错的地方)...我希望这不是公共(public)下载 url,而是 Firebase 存储安全规则将检查的下载 url:

第 4 步

var pathReference = storage.ref('items/<some-key>/1/Item-1');

pathReference.getDownloadURL()
.then((url)=>{
console.log("url: ", url);
})

我从这次通话中收到的网址给了我这个链接 奥 git _a(我用于测试的一个小图像)

到目前为止一切顺利,拥有正确声明的用户能够查看此图片

然后我重复步骤 2,再次注销/登录,只不过这次的 permId 为“0”。我预计之前生成的 url 将不再有效,因为我的用户不再具有正确的自定义声明...并且存储桶位置仍位于同一位置 (bucket/dev_key/1/filename),但它仍然有效。

如果我重复步骤 4,我会得到一个新的 url,然后它会给出相应的 403 错误响应。然而,旧的 url 仍然有效(我猜只要附加了 token 参数)。这是预期的吗?如果是这样,我不确定我是否理解存储安全规则在下载网址是公开的情况下如何产生影响?

任何帮助我清理大脑的帮助将不胜感激。

最佳答案

Cloud Storage for Firebase 中的下载网址始终是公开可读的。它不受安全规则的影响。

如果您不想允许公开访问某个文件,您可以撤销其下载 URL。

关于firebase - 无法获取 Firebase 存储安全规则来拒绝访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47653021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com