¿Cómo redirigir a un usuario a una actividad específica en Cloud Firestore?

5 minutos de lectura

avatar de usuario
sába nayab

Mientras registraba una cuenta usando la autenticación de Firebase, almacené correos electrónicos en 2 categorías Profesor y Estudiante. Agrego correos electrónicos a Firestore 2 categorías diferentes Profesor y Estudiante con email y password. Cuando inicio sesión, quiero verificar que el correo electrónico pertenece a qué categoría (Profesor o Estudiante) ¿cómo puedo hacer eso? Probé la consulta de firestore isequalsto pero no diferenció.

Aquí está mi base de datos

Profesor

ingrese la descripción de la imagen aquí

Estudiante

ingrese la descripción de la imagen aquí

¿Alguna otra solución posible?

aquí está mi código para la actividad de inicio de sesión

package com.example.dell.step;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QuerySnapshot;

public class LoginActivity extends AppCompatActivity {


    private Button mRegbtn;
    private Button mloginbtn;
    private EditText mEmail;
    private EditText mPassword;

    private Toolbar mToolbar;

    private FirebaseAuth mAuth;

    private ProgressDialog mLoginDialog;
    private FirebaseFirestore firebaseFirestore;
    private CollectionReference collectionReference_I;
    private CollectionReference collectionReference_S;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);


        mAuth = FirebaseAuth.getInstance();

        //Progress Dialog

        mLoginDialog = new ProgressDialog(this);

        //FOr Toolbar

        mToolbar = findViewById(R.id.login_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Login Account");


        mloginbtn = findViewById(R.id.login_btn);
        mEmail = findViewById(R.id.login_email);
        mPassword = findViewById(R.id.login_password);

        mRegbtn = findViewById(R.id.login_reg_btn);

        firebaseFirestore = FirebaseFirestore.getInstance();

        mRegbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent regIntent = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(regIntent);
                finish();

            }
        });


        mloginbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = mEmail.getText().toString();
                String password = mPassword.getText().toString();

                if (!TextUtils.isEmpty(email) && !TextUtils.isEmpty(password)) {
                    mLoginDialog.setTitle("Login User");
                    mLoginDialog.setMessage("Please wait while we login to your account :)");
                    //it stops cancel Dialog when user touch on screen
                    mLoginDialog.setCanceledOnTouchOutside(false);
                    mLoginDialog.show();

                    login_user(email, password);
                }
            }
        });


    }

    private void login_user(final String email, final String password) {

        collectionReference_I = firebaseFirestore.collection("Teacher");
        collectionReference_S = firebaseFirestore.collection("Student");

        collectionReference_I.whereEqualTo("teacher_email", email).get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot documentSnapshots) {

                mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {


                        if (task.isSuccessful()) {

                            //Dismiss the progress Dialog
                            mLoginDialog.dismiss();


                            //user is registered
                            Toast.makeText(LoginActivity.this, "Welcome to Teacher Account", Toast.LENGTH_SHORT).show();
                            Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
                            startActivity(mainIntent);
                            finish();


                        } else {

                            mLoginDialog.hide();

                            //if user is not registered
                            Toast.makeText(LoginActivity.this, "Cannot Log in Please check the form and try again!", Toast.LENGTH_LONG).show();

                        }

                    }
                });


            }
        });

        collectionReference_S.whereEqualTo("Student_email", email).get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot documentSnapshots) {

                mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {


                        if (task.isSuccessful()) {

                            //Dismiss the progress Dialog
                            mLoginDialog.dismiss();


                            //user is registered
                            Toast.makeText(LoginActivity.this, "Welcome to Student Account", Toast.LENGTH_SHORT).show();
                            Intent mainIntent = new Intent(LoginActivity.this, StudentMain.class);
                            startActivity(mainIntent);
                            finish();


                        } else {

                            mLoginDialog.hide();

                            //if user is not registered
                            Toast.makeText(LoginActivity.this, "Cannot Log in Please check the form and try again!", Toast.LENGTH_LONG).show();

                        }

                    }
                });


            }
        });


    }
}

  • ¿Puede publicar la estructura de su base de datos y qué error/salida obtuvo con el enfoque actual?

    – Mayur Gajra

    12 abr 2019 a las 15:50

  • agrego imágenes ahora revisa la publicación amablemente

    – Saba Nayab

    12 de abril de 2019 a las 16:02

  • Entonces, mirando su estructura de datos y la explicación que dio, creo que solo quiere poder diferenciar si este correo electrónico es del maestro o no, ¿nada más? ¿Derecha? o hay algo más que me estoy perdiendo?

    – Mayur Gajra

    12 de abril de 2019 a las 16:11

  • @SabaNayab Tienes que poner a todos los usuarios en una sola tabla llamada user por ejemplo y agregue un atributo llamado user_type TEACHER o STUDENT entonces podrá hacer lo que quiera con una sola llamada API (Consulta), luego, si el correo electrónico existe, verifique el tipo de usuario, de lo contrario, el usuario no existe.

    – Ibrahim Disouki

    12 de abril de 2019 a las 16:13

  • sí @MayurGajra

    – Saba Nayab

    12 de abril de 2019 a las 16:14

  • si quiero revisar el correo electrónico en la página de inicio de sesión, ¿cómo puedo hacerlo en la respuesta anterior? Primero tengo que redirigir a la página principal y luego verifico el tipo de usuario.

    – Saba Nayab

    13 de abril de 2019 a las 8:20

  • Hágalo en dos pasos, primero obtenga el correo electrónico y la contraseña e inicie sesión y redirija ambos a la página principal y luego redirija a cada usuario a la página deseada.

    – Alex Mamo

    13 de abril de 2019 a las 8:42

  • Al responder una pregunta anterior, su respuesta sería mucho más útil para otros usuarios de StackOverflow si incluyera algún contexto para explicar cómo ayuda su respuesta, particularmente para una pregunta que ya tiene una respuesta aceptada.

    – David Buck

    26 de noviembre de 2019 a las 9:55

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad