2017-09-05 9 views
0

データベースのルールは、データベースにすでに同じデータが存在するかどうかを検証するために設定できますが、現在は同じデータを受け入れるだけですが、ユーザ名と電子メール?Firebaseのリアルタイムデータベース検証のユーザ名とメール

{ 
"rules": { 
     ".read": true, 
    ".write": true, 
     "username":{ 
     ".validate": "!root.child('username').child(newData.val()).exists()" 
     }, 
     "email":{ 
     ".validate": "!root.child('email').child(newData.val()).exists()" 
     } 

     } 
    } 

ルートの子は電子メール認証のuidによって作成され、残りは同じノードの下に置かれます。同じユーザー名とメールアドレスを入力してユーザーを防止するための方法

enter image description here

答えて

0

ルールは、単一のプロパティ/usernameが存在し、書き込み中の新しいデータと同じ値を持つかどうかを検証します。あなたのユースケースは異なっているように見えます。つまり、すべてのユーザーに一意のユーザー名を付ける必要があります。

Firebaseのセキュリティルールでは、複数のノードにわたって一意の値を保証することはできません。代わりに、上記のデータ構造は、ユーザーik3sf...が名rexyou0831を主張していることを示し

usernames 
    "rexyou0831": "ik3sf...." 

すなわち、別のコレクション内のキーとしてユーザー名を保存する必要があります。このような構造があれば、キーは定義上、コレクション内で一意でなければならないため、ユーザー名は一意であることが保証されます。あなたは、ユーザーが唯一の新しい名前を書いたりして、自分の名前を削除することができていることを確認することができます

{ 
    "rules": { 
    "usernames": { 
     "$name": { 
     ".write": "!data.exists() || newData.val() === data.val()" 
     } 
    } 
    } 
} 

があまりにも電子メールアドレスの一意性を強制するには、あなたがそれらのために同様のコレクションを作成する必要があります。

:より詳細な説明については

は、この同じトピックをカバーし、前の質問のいずれかを読んで

関連する問題