数据库上的Firebase身份验证规则

时间:2018-03-16 18:12:18

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

我必须在Firebase数据库中实施规则,以防止未经授权的访问(读取,写入)。
在我的数据库中,我有一些单词。每个单词都有一个“uid”字段,对应于本地存储中authUser键的uid。

在我的REST调用Firebase中,我传递参数uid:

const urlByUser = 'orderBy="uid"&equalTo="'+uid+'"';

我在Firebase数据库中实现了以下“.read”规则,但它不起作用(我得到了无法访问的权限;当然我也将访问令牌作为URL中的参数传递):

{
  "rules": {
      "words": {
      ".indexOn": ["uid"],
      "$uid": {
        ".read": "$uid == auth.uid"
      }
    }
  }
}

规则中有什么问题吗?
感谢

1 个答案:

答案 0 :(得分:1)

默认情况下,对某个位置的查询要求您具有对该整个位置的读取权限。这意味着规则本身不能用于过滤数据。

然而,您可以执行的操作(最近添加的内容)是写入规则,用于确定在特定位置允许哪些查询。在您的情况下,这意味着您允许从/words读取,但只有才能通过auth.uid 查询过滤。因此,您将拥有允许正确筛选查询的规则,但拒绝未经过滤(或错误过滤)的侦听器。

Firebase documentation中的Introducing Query-based Security Rules和Firebase博客上详细了解该功能。从那里修改:

{
  "rules": {
     "words": {
        ".read": "auth.uid != null &&
                  query.orderByChild == 'uid' &&
                  query.equalTo == auth.uid"
     }
  }
}