2017-09-05 37 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安全规则中多个节点的唯一值。你,而不是需要将用户名作为密钥存储在一个单独的集合,即

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

以上数据结构表明用户ik3sf...声称名rexyou0831。有了这样的结构,用户名就被保证是唯一的,因为密钥在定义上必须在集合中是唯一的。您可以确保用户只能写新名称或删除自己的名字:

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

要强制执行的电子邮件地址的唯一性过多,你需要创建一个类似的收集那些。

更多解释阅读中涉及这一同一主题前面的一个问题: