Me gustaría consultar una base de datos en tiempo real de Firebase para encontrar una cuenta de usuario basada en su correo electrónico.
Así es como lo estoy haciendo actualmente con la identificación del usuario obviamente incorrecta cuando no conoce la identificación.
const userData = (await UsersDatabase.ref(`/Users/oi73WHp4T8LUCgtZzesN`).once('value')).val();¿Cómo puedo consultar a todos los usuarios para encontrar la cuenta con un correo electrónico específico?
Así es como se ve la respuesta JSON:
{ "userData":{ "Account Created":1647458347685, "Date of Birth":"01/01/1901", "Email":"user@domain.com", "Gender":"male", "Name":"Test Account" } }Aquí está la respuesta actualizada de esta solicitud:
const userData = (await UsersDatabase.ref("Users").child("userData").orderByChild("Email").equalTo("test@domain.com"));Aquí está la respuesta en Postman:
{ "userData": "https://domain.europe-west1.firebasedatabase.app/Users/userData" }¡Toda ayuda es bienvenida!
Suponiendo que la dirección de correo electrónico se almacena en la propiedad Email , puede usar una consulta para encontrar el nodo secundario correcto de Users con:
UsersDatabase .ref("Users") .orderByChild("Email") .equalTo("user@domain.com")En esta línea, está esperando la Reference en sí, sin obtener sus datos:
const userData = (await UsersDatabase.ref("Users").child("userData").orderByChild("Email").equalTo("test@domain.com"));Esta línea debería ser (arreglada la consulta y fragmentada para facilitar la lectura):
const userData = ( await UsersDatabase.ref("Users") .orderByChild("Email") // <-- removed .child("userData") .equalTo("test@domain.com") .once('value') // <-- this was missing ).val(); /* userData will be: { "oi73WHp4T8LUCgtZzesN": { // <- this will be random "Account Created":1647458347685, "Date of Birth":"01/01/1901", "Email":"test@domain.com", "Gender":"male", "Name":"Test Account" } } */Aunque lo reescribiría así para desenvolver los datos:
const foundUsersQuerySnapshot = await UsersDatabase.ref("Users") .orderByChild("Email") .equalTo("test@domain.com") .limitToFirst(1) .once('value'); let userData = null; foundUsersQuerySnapshot.forEach(childSnapshot => { userData = { ...childSnapshot.val(), _key: childSnapshot.key }; return true; // <- only return first entry }); /* userData will either be null (not found) or: { "_key": "oi73WHp4T8LUCgtZzesN", "Account Created":1647458347685, "Date of Birth":"01/01/1901", "Email":"test@domain.com", "Gender":"male", "Name":"Test Account" } */