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

相關問題