我在使用firebase安全规则时遇到了一个奇怪的错误。我目前的代码是:
".read":
root.child('parent_to_rider').child(auth.uid).child($rider_id).exists()"
我收到以下错误:
"root.child('parent_to_rider').child(auth.uid).child($rider_id).exists()"
20:57: child() expects a string argument.
=> false`
但是,当我尝试以下代码时,它可以正常工作:
".read":
root.child('parent_to_rider').child('simplelogin:18').child($rider_id).exists()"
回复是:
Attempt to read /riders/-JnSvkcZ8Xs2dEnEeZdm with auth=Success(null)
"root.child('parent_to_rider').child('simplelogin:18').child($rider_id).exists()"
=> true
Read was allowed.
安全规则似乎只会给.read带来错误,同样的规则与.write规则完全一致。我很感激这里的任何帮助。
我的完整规则块如下所示:
"riders" : {
"$rider_id" :{
//Check if mapping from rider to parent already exists
".read":
"root.child('parent_to_rider').child(auth.uid).child($rider_id).exists()",
".write":
"(root.child('parent_to_rider').child(auth.uid).child($rider_id).exists())",
}
}
答案 0 :(得分:1)
我认为问题在于我没有在firebase规则模拟器中正确验证用户。首先验证用户'simplelogin:18',然后模拟上述规则工作正常。
我仍然需要解决为什么我的客户端代码不能使用此规则集,但这是一个不同的问题。
答案 1 :(得分:0)
我发现在需要auth !== null
的规则前面添加child(auth.uid)
可以解决错误。
所以你的第一条规则是这样的:
".read":
auth !== null && root.child('parent_to_rider').child(auth.uid).child($rider_id).exists()"
当您将模拟器用作“未经验证的”并且auth
正在查找字符串而不是未定义的变量时,变量child()
未定义。