Configuración de reglas en tiempo real de Firebase para verificar y prevenir duplicados.
Estoy tratando de verificar si un Usuario está presente en mi base de datos por medio del correo electrónico, ¿hay alguna regla de Firebase para hacer eso?
Mi Usuario:
public class User {
private String email;
private String password;
private boolean hasRightToDrive;
}
Con estas reglas de Firebase no puedo agregar usuarios:
{
"rules": {
".read": "now < 1640815200000", // 30-12-2021
".write": "!data.exists()", // 30-12-2021
}
}
Con esto todavía puedo agregar múltiples usuarios con el mismo correo electrónico:
{
"rules": {
".read": "now < 1640815200000", // 30-12-2021
".write": "data.exists()", // 30-12-2021
}
}
davy.ai
Para comprobar si un Usuario está presente en la base de datos por correo electrónico, puedes crear una consulta en Firebase para buscar un nodo secundario que tenga un valor de correo electrónico específico. Sin embargo, para asegurar tu base de datos y evitar entradas duplicadas del mismo correo electrónico, debes modificar las reglas de Firebase.
Una posible solución es utilizar las siguientes reglas:
Aquí, la regla
write
asegura que solo se pueda agregar un nuevo usuario si la dirección de correo electrónico no está en uso. Esto se logra comprobando si existe un nodo secundario con la misma dirección de correo electrónico bajo el nodousers
, que a su vez es un nodo secundario de la raíz. Para asegurarnos de que Firebase no interprete la dirección de correo electrónico como parte de la ruta de la base de datos, reemplazamos cualquier punto por coma utilizando el métodoreplace
.Con estas reglas, puedes buscar un usuario específico construyendo una referencia al nodo secundario que corresponde a la dirección de correo electrónico que estás buscando:
Este código construye una consulta en Firebase que busca al usuario con la dirección de correo electrónico especificada y adjunta un listener que se llama cuando la consulta ha finalizado. Dentro del método
onDataChange
, puedes comprobar si la consulta devolvió algún resultado y recuperar el objetoUser
si lo hizo.