Validation 动态子密钥的Firebase验证
假设我有以下数据结构:Validation 动态子密钥的Firebase验证,validation,firebase,firebase-realtime-database,firebase-security,Validation,Firebase,Firebase Realtime Database,Firebase Security,假设我有以下数据结构: users { "GSlxbK0iBYC30d1LDnIaMmERFa6" { "friends": { "H2JBkBgiGx1QCn2D4Ku6ZEKpuYu": true, "45iOj1Ak4Y7PmxHqcnR2I4DfMBS": true, "KFhzQdJZOPn9g3vAJLUo4MSTkBa": true } } } “用户”键和“朋
users {
"GSlxbK0iBYC30d1LDnIaMmERFa6" {
"friends": {
"H2JBkBgiGx1QCn2D4Ku6ZEKpuYu": true,
"45iOj1Ak4Y7PmxHqcnR2I4DfMBS": true,
"KFhzQdJZOPn9g3vAJLUo4MSTkBa": true
}
}
}
“用户”键和“朋友”键是auth.uid GUID。我想在“friends”下验证一下,子值仅为布尔值
我尝试了以下方法:
{
"rules": {
"$user_id": {
".read": "newData.child($user_id).val() == auth.uid",
".write": "newData.child($user_id).val() == auth.uid",
"friends": {
".validate": "newData.child($friend_id).isBoolean()"
}
}
}
}
但是,在尝试发布时返回以下错误:
Error saving rules – Line 8: Unknown variable '$friend_id'.
有没有办法将叶键称为变量
我对规则进行了如下更新,以尝试解决此问题,并成功发布:
{
"rules": {
"$user_id": {
".read": "newData.child($user_id).val() == auth.uid",
".write": "newData.child($user_id).val() == auth.uid",
"friends": {
".validate": "newData.isBoolean()"
}
}
}
}
但是,当运行模拟器时,它在验证线上失败,并出现以下错误:
Line 8 (/users/GSlxbK0iBYC30d1LDnIaMmERFa6/friends)
validate: "newData.isBoolean()"
即使在阅读了文档之后,我还是有点困惑,因为我的数据集包含布尔叶值,这个验证规则到底在评估什么以及为什么失败
感谢您的帮助。您已接近目标,但您的验证级别太高了。由于要验证好友ID本身,因此需要在其
$friendid
节点中定义验证:
{
"rules": {
"$user_id": {
".read": "newData.child($user_id).val() == auth.uid",
".write": "newData.child($user_id).val() == auth.uid",
"friends": {
"$friendId": {
".validate": "newData.isBoolean()"
}
}
}
}
}