После сообщения здесь Я создал простое правило безопасности и облачную функцию, которая вызывается, чтобы увидеть, существует ли уже имя пользователя.Проблема в том, что проверка записи правила безопасности всегда проходит и просто устанавливает новое значение в этом месте (/ username_lookup / user1).
Когда я пытаюсь написать в этом месте с помощью симулятора правил базы данных в реальном времени, он работает как положено, т.е. запись заблокирована.
Может кто-то определить проблему?
правило безопасности firebase
"rules": {
"username_lookup": {
"$username": {
// not readable, cannot get a list of usernames!
// can only write if this username is not already in the db
".write": "!data.exists()",
// can only write my own uid into this index
".validate": "newData.val() === auth.uid"
}
}
}
и облачная функция
var fb = admin.database().ref();
createUser(uid, username);
function createUser(userId, usrname) {
fb.child('username_lookup').child(usrname).set(userId, function(unerr) {
if(unerr) {
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({error: "the_error_code" }));
}
});
}
Снимок экрана объекта / индекса username_lookup