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
Estudiante
¿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 llamadouser_type
TEACHER
oSTUDENT
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