Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 动态子密钥的Firebase验证_Validation_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

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()"
                }
            }
        }
    }
}