2017-07-25 110 views
0

我已閱讀關於規則的Firebase文檔以及如何驗證寫入數據庫的新數據。有一條線我不明白某件事。Firebase規則驗證數據

下面是來自Firebase Documentation的firebase規則的代碼。

{ 
    "rules": { 
    ".write": true, 
    "widget": {rules) 
     ".validate": "newData.hasChildren(['color', 'size'])", 
     "size": { 
     ".validate": "newData.isNumber() && 
         newData.val() >= 0 && 
         newData.val() <= 99" 
     }, 
     "color": { 
     // the value of "color" must exist as a key in our mythical 
     // /valid_colors/ index 
     ".validate": "root.child('valid_colors/' + newData.val()).exists()" 
     } 
    } 
    } 
} 

".validate": "root.child('valid_colors/' + newData.val()).exists()"是我不明白它是什麼以及它在做什麼的地方。

  • 什麼是root.child?用於訪問顏色的孩子嗎?
  • 什麼是newData.val()).exists()exists()用於什麼?

回答

2

當您使用「root」時,它會一直返回頂部。想象一下,一個數據庫是這樣的:

Database: 
-users 
    -uid's 
    -username 
-valid colors 
    -blue 
    -red 

當你說root.child("users"),你進入它包含了用戶的地圖。

而當你說root.child("valid colors/blue")將去看看有效顏色的子圖。

存在檢查它是否存在於數據庫中。 newData代表你想輸入的數據。如果你想輸入「綠色」,它會失敗。這是因爲如果你的JSON看起來像這樣:

"color" : green 
newData.val() = green 

它存在於你的數據庫中嗎?不,不在所提供的示例中。這就是爲什麼它會失敗。藍色存在於您的數據庫中。當你輸入新數據時,它會通過規則。

+0

謝謝,它真的有幫助! – UmarZaii