2つの値が常にリアルタイムのDBに一緒に書き込まれるようにします。ファイヤーベースアトミック書き込み
私は、次のようなレイアウトがあります。
- > register_username
- - > uid_lookup
- - - > "some_username": "some_uid"
を - - > username_lookup
- "some_uid": "some_username"
これらは、(書式設定のため申し訳ありませんが)ルールです:私はそれが正常に動作します
{
"uid_lookup": {
"username": "123"
},
"username_lookup": {
"123":"username"
}
}
/register_username/
に書き込む
// uid -> username && username -> uid
"register_username": {
".write": "auth !== null",
".validate": "newData.hasChildren(['uid_lookup', 'username_lookup'])",
// username -> uid
"uid_lookup": {
"$username": {
".validate": "newData.val() === auth.uid && !data.exists()"
}
},
// uid -> username
"username_lookup": {
".write": "!data.exists()",
"$uid": {
".validate": "auth.uid === $uid && newData.val().matches(/^[a-zA-Z0-9-_]{4,20}$/) && newData.parent().parent().child('uid_lookup/' + newData.val()).exists()"
}
},
// don't allow any other children
"$other": {".validate": false}
}
。
しかし、なぜエラーが発生することなく/register_username/uid_lookup/
に書き込むことができますか?
私はちょうど答えを書いていますが、今あなたがあなたの検証ルールについて質問しているかもしれないことを認識していることを認識してください。 :/ –