如何使用auth.uid变量在firebase上设置indexOn规则?

时间:2019-04-14 10:21:09

标签: firebase firebase-realtime-database firebase-authentication firebase-security-rules

我正在尝试在firebaseDatabase中的节点上设置规则,但出现错误

  

错误保存规则-第85行:键名不能包含“。”,“#”,“ $”,   “ /”,“ [”或“]”(未绑定名称以“ $”开头)

据我了解,auth.uid是当前登录用户的全局变量。我该如何解决?

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null", 

        "notifications/auth.uid": {
        ".indexOn":["createdAt"]    
      }
  }
}

2 个答案:

答案 0 :(得分:1)

这是问题

"notifications/auth.uid"

因为它将引号内的所有内容都视为一个字符串,所以句点导致错误,并且路径不能包含句点字符。另外,它不会解析auth.uid,因为它只是一个字符串,而不是您想要的变量。你可以做类似的事情

root.child('notifications').child(auth.uid) {...

甚至

root.child( 'notifications/' + auth.uid ) {...

答案 1 :(得分:1)

如果您试图将每个用户的通知存储在他们的auth.uid下,并允许通过定义索引进行查询,那么您正在寻找以下规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null", 

    "notifications": {
      "$uid": {
        ".indexOn":["createdAt"]    
      }
    }
  }
}

这里的$uid是通配符,适用于notifications下的每个节点。要了解有关此内容的更多信息,请参见Using $ Variables to Capture Path Segments