2017-09-05 1 views
0

Les règles de base de données ont récemment été définies pour valider si la base de données contient déjà les mêmes données mais accepte les mêmes données mais comment valider et empêcher la même saisie de nom d'utilisateur et d'email ?Nom d'utilisateur et email de validation de base de données Firebase

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

     } 
    } 

L'enfant racine est créé par uid d'authentification électronique et le reste sera sous les mêmes nœuds.

enter image description here

Comment empêcher utilisateur d'entrer le nom d'utilisateur et même e-mail?

Répondre

0

Vos règles valident si une seule propriété /username existe et a la même valeur que les nouvelles données que vous écrivez. Votre cas d'utilisation semble différent: vous souhaitez garantir un nom d'utilisateur unique pour tous les utilisateurs.

Vous ne pouvez pas garantir une valeur unique sur plusieurs nœuds multiples dans les règles de sécurité de Firebase. Vous hériterez besoin de stocker les noms d'utilisateur comme clés dans une collection séparée, à savoir

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

La structure de données ci-dessus indique que l'utilisateur ik3sf... nom revendiqué rexyou0831. Avec une telle structure en place, les noms d'utilisateurs sont garantis uniques car les clés doivent par définition être uniques dans une collection. Vous pouvez faire en sorte que les utilisateurs ne peuvent écrire de nouveaux noms ou supprimer leur propre nom avec:

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

Pour garantir l'unicité des adresses e-mail aussi, vous devrez créer une collection similaire pour ceux-ci.

Pour plus d'explications lire une des questions précédentes portant sur ce même sujet: