android - signinwithcustomtoken - Recuperar y verificar si un usuario en particular ingresa un correo electrónico está presente en firebase
sendpasswordresetemail firebase android (1)
Estoy desarrollando una aplicación para Android y usando Firebase para almacenar mis datos. Deseo consultar la instancia de firebase para verificar si la dirección de correo electrónico ingresada por el usuario coincide con uno de los correos electrónicos de Firebase. Adjuntando los datos back-end de Firebase.
Mi requisito es, quiero pasar a través de los "guardianes" , que es el hijo directo de la instancia de la base de datos y comprobar si el usuario ingresó el correo electrónico coincide con cualquiera de las direcciones de correo electrónico en ese niño. En la imagen adjunta, si el usuario ingresó el correo electrónico coincide con "[email protected]" u otro, quiero hacer algo.
databaseReference = FirebaseDatabase.getInstance().getReference().child("guardians");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
if (**I am unable to figure out how to search through entire guardians child for the email**) {
} else {
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
No puedo averiguar cómo buscar a través de todo el niño guardián para ver si el correo electrónico coincide con el correo electrónico ingresado por el usuario. Cualquier ayuda es apreciada. Gracias por adelantado.
Si hiciste que tu enfoque actual funcione (es una cuestión de agregar la declaración if
correcta) estarías descargando toda la lista de usuarios, solo para verificar si una dirección de correo electrónico específica está en uso. Esto es un desperdicio increíble de ancho de banda, especialmente a medida que su lista de usuarios crece.
En su lugar, debe usar una consulta de base de datos de Firebase para que solo devuelva al usuario la dirección de correo electrónico solicitada:
databaseReference = FirebaseDatabase.getInstance().getReference().child("guardians");
Query query = databaseReference.orderByChild("guardianEmail").equalTo("[email protected]");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
... the email address is already in use
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don''t ignore errors
}
});
Asegúrese de agregar un índice para el campo guardianEmail
, ya que de lo contrario, seguirá descargando todos los datos para la consulta.
Tenga en cuenta que este tema ha sido cubierto varias veces anteriormente, y hay mejores formas de hacer este control. La mayoría de estos implican la creación de un llamado índice invertido, donde se utiliza la dirección de correo electrónico (codificada) del usuario como clave. Con esa estructura, puedes evitar duplicados en las reglas de seguridad del lado del servidor de Firebase, lo que es aún más eficiente.
Para más información sobre este y otros enfoques, ver:
- Aplicación de nombres de usuario únicos con Firebase simplelogin
- Firebase Android: haz que el nombre de usuario sea único
- ¿Cómo previene las propiedades duplicadas de los usuarios en Firebase?
- Nombres de usuario con Firebase Simple Login (correo electrónico / contraseña)
- ¿Qué regla de Firebase evitará duplicados en una colección basada en otros campos?