But
Autoriser différents types d'utilisateurs à se connecter à leurs interfaces respectives
Description
Types d'utilisateurs (3):
Chaque utilisateur est enregistré via Firebase Authentication Email
Chaque utilisateur devrait pouvoir accéder à ses interfaces respectives en tant qu’interface différente de l’autre.
Chaque utilisateur a déjà été enregistré avec ses nœuds enfants respectifs dans la base de données Firebase. Par exemple, sous "Utilisateurs", il y a une "école" et sous ce sont les types d'utilisateurs tels que "Étudiant", "Parent" et "Enseignant".
Base de données à des fins de visualisation
-> école
------> Étudiant
------> Parent
------> Enseignant
Problème
Étant donné que j'utilise actuellement le courrier électronique d'authentification Firebase, je ne parviens pas à distinguer quel utilisateur est quel utilisateur.
Une solution proposée qui consiste à créer un bouton radio avec 3 types d'utilisateurs à sélectionner par l'utilisateur lors de la connexion à l'application. Cela signifie que l'utilisateur devra se connecter en saisissant son email, son mot de passe et en sélectionnant son type d'utilisateur.
Le problème, c’est que si l’utilisateur «Étudiant» sélectionne «Parent» ou «Enseignant» sur le bouton radio et s’identifie à l’aide d’un email de l’étudiant, l’application reconnaîtra quand même l’e-mail «Étudiant» en tant que «parent» ou « Prof"
Classe LoginActivity
import Android.content.Intent;
import Android.support.annotation.NonNull;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.support.v7.widget.Toolbar;
import Android.text.TextUtils;
import Android.util.Log;
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.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthException;
public class LoginActivity extends AppCompatActivity {
private Toolbar jLoginToolbar;
private EditText jLoginEmail;
private EditText jLoginPassword;
private Button jLoginBtn;
private Button jAdminLoginBtn;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mAuth = FirebaseAuth.getInstance();
jLoginToolbar = (Toolbar) findViewById(R.id.loginToolbar);
setSupportActionBar(jLoginToolbar);
getSupportActionBar().setTitle("Account Login");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
jLoginEmail = (EditText) findViewById(R.id.loginEmail);
jLoginPassword = (EditText) findViewById(R.id.loginPassword);
jLoginBtn = (Button) findViewById(R.id.loginBtn);
jAdminLoginBtn = (Button) findViewById(R.id.loginAdminBtn);
jAdminLoginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intentAdmin = new Intent(LoginActivity.this, AdminLoginActivity.class);
startActivity(intentAdmin);
}
});
jLoginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String userLoginEmail = jLoginEmail.getText().toString();
String userLoginPassword = jLoginPassword.getText().toString();
if(!TextUtils.isEmpty(userLoginEmail)&& !TextUtils.isEmpty(userLoginPassword)) {
loginUser(userLoginEmail, userLoginPassword);
}else{
Toast.makeText(LoginActivity.this, "Failed Login: Empty Inputs are not allowed", Toast.LENGTH_SHORT).show();
}
}
});
}
private void loginUser(final String userLoginEmail, final String userLoginPassword) {
mAuth.signInWithEmailAndPassword(userLoginEmail, userLoginPassword)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Intent intentMain = new Intent(LoginActivity.this, MainActivity.class);
intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentMain);
finish();
}else{
FirebaseAuthException e = (FirebaseAuthException )task.getException();
Toast.makeText(LoginActivity.this, "Failed Login: "+e.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
}
});
}
}
Ma solution proposée (incomplète)
Je pensais que je devrais coder en dur "UserCode" pour chaque utilisateur
Par exemple, chaque utilisateur à côté de son "code d'utilisateur" respectif
"Student" = "Student123"
"Parent" = "Parent123"
"Teacher" = "Teacher123"
Un exemple de code sera comme ça
if(task.isSuccessful() && userCode.equals("Student123")){
//Send user to Student Interface
}else if(task.isSuccessful() && userCode.equals("Parent123")){
//Send user to Parent Interface
}else if(task.isSuccessful() && userCode.equals("Teacher123")){
//Send user to Teacher Interface
}
Le UserCode sera un EditText qui permettra à l'utilisateur d'entrer le "userCode" même si le concept de cette idée est similaire à celui du bouton radio, il fournira plus de sécurité car le "userCode" agit comme un mot de passe "secondaire". dans lequel les utilisateurs ne le sauront que de moi (administrateur). Donne moi tes pensées
>>>>>>>>>>>>>>>>>>>>>>>>>>> SOLUTION <<<<<<<<<<<<<<<<<<< <<<<<<<<
Solution - Description
Une fois que l'utilisateur est Authenticated via l'authentification de messagerie Firebase, une instruction If else sera exécutée dans la fonction "loginUser", ce qui déterminera si l'utilisateur authentifié a été enregistré comme "étudiant", "parent" ou "enseignant". ".
Lors de l’enregistrement, enregistrez une variable "userType" pour l’utilisateur. Le "userType" sera stocké dans l'arborescence de la base de données. De cette façon, vous pourrez l'appeler pour vérifier le type d'utilisateur pendant la session de connexion.
Solution - Exemple de code
private void loginUser(final String userLoginEmail, final String userLoginPassword) {
mAuthLogin.signInWithEmailAndPassword(userLoginEmail, userLoginPassword)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
String RegisteredUserID = currentUser.getUid();
jLoginDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(RegisteredUserID);
jLoginDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userType = dataSnapshot.child("userType").getValue().toString();
if(userType.equals("Resident")){
Intent intentResident = new Intent(LoginActivity.this, ResidentActivity.class);
intentResident.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentResident);
finish();
}else if(userType.equals("Guard")){
Intent intentMain = new Intent(LoginActivity.this, SecurityGuardActivity.class);
intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentMain);
finish();
}else if(userType.equals("Police")){
Intent intentMain = new Intent(LoginActivity.this, PoliceActivity.class);
intentMain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentMain);
finish();
}else{
Toast.makeText(LoginActivity.this, "Failed Login. Please Try Again", Toast.LENGTH_SHORT).show();
return;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
});
}
Tout ce dont vous avez besoin est un moyen de vérifier que l'utilisateur est un parent, un étudiant ou un enseignant lors de sa première inscription à l'application. Ensuite, vous insérez une variable "type" dans la section d'informations utilisateur de la base de données Firebase (type = parent, élève ou enseignant). Ensuite, quand ils se connectent, vous récupérez leur "type". Et affichez la bonne interface correspondante.
vous devez prendre 1 plus parameter as a type
Dans lequel si user's student login
il est facile de differentiatable
dans database
database table
en fonction de vos besoins