如何使用匿名身份验证确保Firebase数据库结构?

时间:2016-09-26 22:53:19

标签: json firebase-realtime-database firebase-authentication geojson firebase-security

我有一个使用Firebase的公共输入型应用,带有匿名身份验证。用户数据用于在地图上创建点。每个匿名用户只能通过安全规则编辑与其身份验证相匹配的节点内的数据。

但是,我的应用依赖于某种数据库结构。如何使用匿名身份验证来确保我的数据库结构/完整性,因为数据库URL是客户端可读的?

我认为安全和验证规则是可行的,但我不确定。也许在一个节点中否认孩子的创造?这对于确保遵循模式是必要的。

每个auth节点可以有许多关键节点,但我想限制此Firebase端。并且每个关键节点必须遵循下面的模式(因此我可以轻松地拉出geojson)。以下是我目前的设置 - 想知道缺少什么?

"features" : {
    "5AGxfaK2q8hjJsmsO3PUxUs09Sz1" : {
      "-KS3R4sWPdcDkrxyIFX6" : {
        "geometry" : {
          "coordinates" : [ -81.88247680664062, 38.884619201291905 ],
          "type" : "Point"
        },
        "properties" : {
          "color" : "#2be",
          "title" : ""
        },
        "type" : "Feature"
      },

firebase rules

1 个答案:

答案 0 :(得分:1)

身份验证和数据库架构是完全独立的主题。您可以在安全文档中使用.write.validate规则的组合来确保数据库架构,而不是与身份验证提供程序有关(即匿名身份验证)。

我们在database security guide

中对此进行了详细介绍

快速摘要:

  • hasChildren:指定必填字段
  • newData:参考正在撰写的数据
  • data:引用数据库中已存在的数据
  • .validate:使用newData.isString()newData.val() == data.val() + 1
  • 等内容指定数据架构

请注意,.validate规则仅针对非空值运行。因此,如果你想尝试像!data.exists()这样的东西(即你只能写一次这个路径,以后不能修改它)或newData.exists()(即你不能删除这些数据)那么你需要在.write规则中指定那些。

有关详细信息,请参阅指南。