ユーザー (Firebase anonymous で認証済み) が氏名、会社名、電子メール アドレスを送信して配布リストに登録できるようにする AngularjS アプリを構築しています。
私が達成したいのは、データを2回入力するユーザーフォームを無効にして、送信されたデータがデータベースに既に存在するかどうかを確認することです。その場合、送信されたデータを拒否し、DB をクリーンに保つ必要があります。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"
}
}
}