У меня есть данные, хранящиеся в базе данных реального времени Firebase, в следующем формате.
users:
-L5ZAb7r10_nqss7Ag:
role: "user"
email: "person@example.com"
username: "King Arthur"
-KL3Abnar7_nals8:
role: "admin"
email: "other@example.com"
username: "Queen Ferdinand"
А в database.rules.json
у меня есть:
"users":{
".indexOn":["email"],
".write": false,
".read": "auth != null"
},
На переднем конце Iпопросите пользователя передать свою электронную почту, прошедшего проверку подлинности с помощью Google OAuth, и я хочу узнать, является ли его электронная почта действительным пользователем, и если да, вернуть свою роль и имя пользователя, в противном случае выдается ошибка.Сейчас я перебираю n-ные учетные записи и проверяю электронную почту каждой учетной записи.O (n), очевидно, действительно плохая среда выполнения.
Не зная, что ключ пользователя в базе данных (часть "-L5ZAb7r10_nqss7Ag"), я хочу иметь возможность проверить наличие данного письма в O (1) путем поиска электронной почты в индексированной базе данных.Я имею в виду что-то вроде ниже.Если это возможно, может кто-нибудь указать мне правильную синтаксическую документацию?
firebase.database().ref(`/users/`).getIndexedValue($key/person@example.com).once('value').then(function(snap){
if(snap == null) console.log("error);
else{
user = snap.val();
console.log(user[role]);
console.log(user[username]);
}
}
Я знаю, что вышесказанное не сработает, .getIndexedValue()
не реально.Какой будет правильный синтаксис для этой функциональности?Есть ли какой-нибудь способ найти определенное индексированное значение (адрес электронной почты), которое находится ниже произвольного предела (-KL3Abnar7_nals8
)?