firebase安全规则child()期望出现字符串错误

时间:2015-04-21 23:38:40

标签: firebase firebase-security

我在使用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())",
  }  
}

2 个答案:

答案 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()未定义。