我想確保2個值總是一起寫入實時db。Firebase原子寫入
我有以下佈局:
- > register_username
- - > uid_lookup
- - - > 「some_username」: 「some_uid」
- - - > username_lookup
- - - >「some_uid」:「some_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}
}
當我寫
{
"uid_lookup": {
"username": "123"
},
"username_lookup": {
"123":"username"
}
}
到/register_username/
它工作正常。
但是,爲什麼我能寫信給/register_username/uid_lookup/
而沒有出現錯誤?
我只是寫一個答案,但現在認識到,你可能會問你的唯一驗證規則。 : -/ –