我是使用Firebase规则的新手,但我已经阅读了文档。我知道最重要的规则优先,但验证规则仍应运行。我的问题是我正在尝试创建唯一的用户名,但每当我模拟插入时,验证永远不会运行。我想要创建的验证规则应该检查用户名的集合并查看它是否已经存在,如果存在则写入失败。
我在下面发布了我的数据结构和规则。 fire_uid
是火基地生成的uid的占位符
当前数据库
{
"userProfile" : {
"fire_uid" : {
"email" : "m@matt.com",
"name" : "matt maxton"
},
"fire_uid" : {
"email" : "v@victor.com",
"name" : "victor tictor"
}
},
"usernames" : {
"testcaseusername" : "fire_uid"
}
}
Firebase规则
{
"rules": {
"$uid": {
".write": "auth !== null",
".read": "auth !== null && auth.provider === 'password'",
"usernames": {
".validate": "!root.child('usernames').child(newData.val()).exists() ||root.child('usernames').child(newData.val()).val() == $uid "
}
}
}
}
模拟测试(我确保此测试中的用户ID与用于在数据库中创建条目的uid不同
location:/ usernames
Json Data:{“testcaseusername”:“fire_uid”}
答案 0 :(得分:0)
您的验证规则位于/$uid/usernames
。但是你的JSON有/userProfile/$uid/name
。要验证后者中的用户名,请使用:
{
"rules": {
"userProfile":
"$uid": {
".write": "auth !== null",
".read": "auth !== null && auth.provider === 'password'",
"name": {
".validate": "!root.child('usernames').child(newData.val()).exists()
||root.child('usernames').child(newData.val()).val() == $uid "
}
}
}
}
}