我刚开始使用Firebase,我能够读/写/编辑/删除数据库。在我的应用程序中,我只向用户显示数据,如果他/她可以访问它。
我通过创建用户节点和另一个节点(称之为服务)并引用该用户子节点中的服务来实现这一点。
之前我从未使用过Firebase的安全规则,现在我想开始使用Firebase存储图像。
我正在关注一个教程,我的控制台说,
许可被拒绝。无法访问存储桶.. 请访问存储,为您的存储桶启用Firebase存储 Firebase控制台中的选项卡,并确保您有足够的内容 允许正确配置资源
在谷歌搜索和搜索SO如何设置这些安全规则时,我不确定什么是正确的答案。一些答案建议我在我的代码中编写方法来授予权限,但文档建议我需要在Firebase的最后完成。
这是其中一个例子
// Grants a user access to a node matching their user ID
service firebase.storage {
match /b/<your-firebase-storage-bucket>/o {
// Files look like: "user/<UID>/path/to/file.txt"
match /user/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
我无法理解人们的答案
就像几个月前的这个一样
{
"rules": {
"UsersDB": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
}
}
}
有人可以解释当前的Firebase(以及适用于iOS Swift ......如果重要的话)如何制作它以便用户1只能读/写他/她的数据/照片
答案 0 :(得分:6)
您需要相应的文件路径结构:
例如,当您上传文件时,将它们存储起来:
(root…) /user/uidxxx/myfile.jpg
&#34; uidxxx&#34;是您的身份验证数据库中定义的唯一用户ID。
然后在控制台/存储/规则选项卡上,您可以编写规则:
// Grants a user access to a node matching their user ID
service firebase.storage {
match /b/<your-firebase-storage-bucket>/o {
// Files look like: "user/<UID>/path/to/file.txt"
match /user/{userId}/{allPaths=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
{userId}
是一个通配符,将被相应的&#34; uidxxx&#34;
答案 1 :(得分:0)
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write;
}`enter code here`
}
}
这是Firebase存储的正确答案