Я создаю приложение AngularjS, которое позволяет пользователям (аутентифицированным анонимно Firebase) отправлять свое полное имя, компанию и адрес электронной почты, чтобы попасть в наш список рассылки.
Что я хочу сделать, так это отключить форму ввода данных пользователями дважды, таким образом проверяя, существуют ли уже отправленные данные в базе данных. Когда это произойдет, он должен отклонить отправленные данные, сохраняя мою БД в чистоте. Пользовательский интерфейс позаботится обо всех сообщениях об ошибках и так далее.
Моя конечная точка: http://someurl.firebaseio.com/accounts/
Примеры данных, отправленных в / accounts / через push ():
{fullName: "John Doe", company: "Pet's Place", email: "[email protected]"}
Настройка правил безопасности 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" : "[email protected]",
"fullName" : "John Doe"
},
"-JY249y2IwFWAYwEqC4Q" : {
"company" : "Pet's Place",
"email" : "[email protected]",
"fullName" : "John Doe"
},
"-JY24ACApcPH2_jiU5PD" : {
"company" : "Pet's Place",
"email" : "[email protected]",
"fullName" : "John Doe"
},
"-JY24AL8QOKQRiTh3Oqm" : {
"company" : "Pet's Place",
"email" : "[email protected]",
"fullName" : "John Doe"
}
}
}