2016-08-14 6 views
2

新しいfirebaseにあり、hasChildren()のRuleDataSnapshotに関する質問をどのように把握し、データの検証方法を知りたいと思います。デシベルの余分な子を作成しないようにするFirebase

サンプル:

{ 
    "visitors" : { 

    "-KP4BiB4c-7BwHwdsfuK" : { 
     "mail" : "[email protected]", 
     "name" : "aaa", 
    } 
    ..... 
} 

ルール:

{ 
    "rules": { 
     "visitors": { 
      ".read": "auth != null", 
      ".write": "auth.uid != null", 
       "$unique-id": { 
        ".read": "auth != null ", 
        ".write": "auth != null", 
        ".validate": "newData.hasChildren(['name','mail'])", 
      } 
     } 

    } 
} 

私の知る限り、私はデータを作成したい場合は、データフィールドは、ルールの検証に合格するために同じ名前を持つ必要があります知っています。 例: 「名前」ごとに「名前」を変更し、子ノードを持つ新しいノードを作成しようとすると、ルールはわかっています。 手動で新しいフィールドを作成して追加するとどうなるでしょうか?

例えば:

//Add extra fields which are not actually present 
var data = {name : "xxx",mail:"[email protected]",extra1:222,extra:333}; 
firebase.database().ref('visitors/').push(data); 

結果は次のとおりです。

"visitors" : { 
    "-KP4BiB4c-7BwHwdsfuK" : { 
     "mail" : "[email protected]", 
     "name" : "juan", 
    "extra1":222, 
     "extra2":333 
    } 
} 

だから私の質問は、ノードあたりの余分なチャイルズを作成回避する方法ですか?私はルールがそれをしたと思います。

ありがとうございます。

答えて

6

あなたの検証ルールは、あなたの投稿が少なくとも子どもたちとないだけそれらの子供を持っていなければなりませんと言います。 確実にするためには他の子供たちは、あなたがあなたのルールに以下を追加する必要が追加することはできません。

{ 
    "rules": { 
    "visitors": { 
     ".read": "auth != null", 
     ".write": "auth.uid != null", 
     "$unique-id": { 
      ".read": "auth != null ", 
      ".write": "auth != null", 
      //This line says the new data must have ATLEAST these children 
      ".validate": "newData.hasChildren(['name','mail'])", 
      //You can add individual validation for name and mail here  
      "name": { ".validate": true }, 
      "mail": { ".validate": true }, 
      //This rule prevents validation of data with more child than defined in the 2 lines above (or more if you specify more children) 
      "$other": { ".validate": false } 
     } 
    } 
    } 
} 

は、別の例を見 hereてください。

関連する問題