users signinwithcustomtoken sendpasswordresetemail password createuserwithemailandpassword autenticacion and android firebase firebase-database

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: