我有一个数据结构,可以将用户的数据添加到其唯一ID中,如下所示。
"users" :
{
"user_id":
{
"name":"John Doe",
"email":"email@example.com",
"account":"limited",
"avatar" : "this will be a base64 data string"
}
}
我想拒绝用户列出其他用户,并且我还希望登录用户根据他们的" user_id"来访问他们的数据。这是从auth.uid获得的
我曾尝试过一些规则:
{
"rules" :
{
"users" :
{
".read" : "false",
".write" : "auth != null && !data.exists() && newData.exists() ",
".validate" : "newData.child('user_id').hasChildren(['name', 'email', 'account','avatar'])",
"user_id" :
{
".read" : "auth.uid === user_id",
".write" : "false",
"avatar" :
{
".write" : "!data.exists() && newData.exists() && auth.uid === user_id",
".read" : "auth.uid === user_id"
}
}
}
}
}
现在请记住" user_id"可以是任何东西,每个用户都有变化,我该如何实现呢?对于我可以解决这个问题的方法,您有其他建议吗?
答案 0 :(得分:8)
您需要仔细查看此处的Firebase文档:https://www.firebase.com/docs/security/guide/user-security.html
您需要使用通配符路径来代表每个用户,如下所示:
{
"rules": {
"users": {
"$user_id": { //this is the WILDCARD path
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid"
}
}
}
}
通配符路径说明:https://www.firebase.com/docs/security/api/rule/path.html
最后,我不建议以这种方式存储电子邮件,因为无论如何都可以通过simpleLogin来存储。