我正在构建一个 AngularjS 应用程序,它允许用户(通过 Firebase 匿名身份验证)提交他们的全名、公司和电子邮件地址以进入我们的分发列表。
我想要完成的是禁用用户表单输入数据两次,从而检查提交的数据是否已经存在于数据库中。当它这样做时,它应该拒绝提交的数据,保持我的数据库干净。UI 将处理所有错误消息等。
我的端点:http ://someurl.firebaseio.com/accounts/
通过 push() 提交到 /accounts/ 的示例数据:
{fullName: "John Doe", company: "Pet's Place", email: "john@petsplace.org"}
Firebase 安全规则设置:
目标:每个人都可以写信到 /accounts/ 来注册,只有唯一的值和长度和 isString 的验证。匿名用户不允许阅读。
{
"rules": {
".read": "auth !== null",
".write": "auth !== null",
"accounts": {
".write": "auth !== null && newData.exists()",
"$accountID": {
".read": false,
".validate": "newData.hasChildren(['fullName', 'company', 'email'])",
"fullName": {
".validate": "newData.isString() && newData.val().length > 0 && newData.val().length < 50 && !newData.val().contains('admin')"
},
"company": {
".validate": "newData.isString() && newData.val().length > 0 && newData.val().length < 50"
},
"email": {
".validate": "newData.isString() && newData.val().length > 0 && newData.val().length < 50"
}
}
}
}
}
(多次)提交后的结果
{
"accounts" : {
"-JY249g70KL-XG0c6ekM" : {
"company" : "Pet's Place",
"email" : "john@petsplace.org",
"fullName" : "John Doe"
},
"-JY249y2IwFWAYwEqC4Q" : {
"company" : "Pet's Place",
"email" : "john@petsplace.org",
"fullName" : "John Doe"
},
"-JY24ACApcPH2_jiU5PD" : {
"company" : "Pet's Place",
"email" : "john@petsplace.org",
"fullName" : "John Doe"
},
"-JY24AL8QOKQRiTh3Oqm" : {
"company" : "Pet's Place",
"email" : "john@petsplace.org",
"fullName" : "John Doe"
}
}
}