2

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

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

我认为这是可能的安全和验证规则,但我不知道。也许否认在一个节点创建儿童?这对确保模式遵循是必要的。

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

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

firebase rules

+0

您可能会发现螺栓编译器很有用。它可以让你定义类型,并且可以使用安全规则更简单地定义一个模式。请参阅:https://github.com/firebase/bolt – cartant

+0

您已经在您的问题中包含了JSON树的图片。请用实际的JSON替换为文本,您可以通过点击Firebase数据库控制台中的导出按钮轻松获取。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –

+0

图片更容易阅读,但我可以包括实际的数据,当然。我会尽快更新。 – malcolm

回答

1

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

这在我们的database security guide中有详细描述。

简要总结:

  • hasChildren:指定所需的字段
  • newData:是指被写入
  • data数据:是指数据在数据库中已经
  • .validate:指定数据模式使用像newData.isString()newData.val() == data.val() + 1

请记住,.validate规则仅对非空值运行。因此,如果您想尝试类似!data.exists()(即您只能写入此路径并且以后无法修改)或newData.exists()(即您无法删除此数据),则需要指定规则中的规则。

请参阅指南了解更多详情。

+0

好吧,如果您使用登录类型身份验证,那么有Oauth重定向域名,但是从较老的Firebase文档中,似乎不包括匿名身份验证。你可能会争辩说一个SSL域名可能被欺骗,但忽视这一点,对于使用Oath重定向域名的情况,规则可以在JavaScript中分配给客户端,是正确的吗? – malcolm

+0

安全规则在服务器上进行管理,而不是在客户端上进行管理。 – Kato

+0

如果newData具有比指定的更多的子项,那么hasChildren是否返回false?或者如上所述,我必须使用“$ other”:{“.validate”:“false”}吗? – malcolm

相关问题