Une nouvelle abeille pour Android Firebase ; J'essaie l'authentification Firebase et j'essaie de vérifier si l'utilisateur est connecté pour ce faire, j'utilise ce code simple:
null != mAuth.getCurrentUser();
Et cela renvoie true
bien que je ne me sois pas connecté mais j'ai activé la connexion annonymous et j'ai pensé que cela pourrait être le problème mais quand je check mAuth.getCurrentUser().isAnonymous()
Je reçois false
.
L'inspection de mAuth.getCurrentUser()
sur le IDE montre ceci:
Toutes les directions ici.
J'ai eu un problème similaire et c'est que se déconnecter de Firebase n'est pas suffisant - il se reconnectera automatiquement.
Il est également nécessaire de se déconnecter à l'aide de GoogleSignInApi:
firebaseAuth.signOut();
Auth.GoogleSignInApi.signOut(apiClient);
Je pense que cela fonctionne comme:
FirebaseAuth.getInstance().getCurrentUser()
Il doit retourner null
si un utilisateur n'est pas connecté.
Pour vérifier si l'utilisateur est connecté:
private FirebaseAuth firebaseAuth;
FirebaseAuth.AuthStateListener mAuthListener;
Puis dans votre onCreate:
firebaseAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener(){
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user!=null){
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}
};
Cela peut être créé dans une classe d'état d'authentification ou une interface. Ensuite, vous pouvez simplement appeler l'état d'authentification ou archiver toute activité avec laquelle vous souhaitez l'archiver:
Vérification de l'état d'authentification lorsqu'une activité est en cours d'exécution:
@Override
protected void onStart() {
super.onStart();
firebaseAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onResume() {
super.onResume();
firebaseAuth.addAuthStateListener(mAuthListener);
}
@Override
protected void onStop() {
super.onStop();
firebaseAuth.removeAuthStateListener(mAuthListener);
}
Maintenant, à propos de votre connexion: après avoir défini vos valeurs booléennes pour vérifier que l'utilisateur est connecté, état: (valeur booléenne par défaut définie sur false)
firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if (!task.isSuccessful()) {
//set a your boolean to false
current_user_db.setValue(false);
et si l'utilisateur est connecté avec succès, définissez-le sur true suivi de votre intention:
else {
String userid = firebaseAuth.getCurrentUser().getUid();
DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference("Users").child(userid);
current_user_db.setValue(true);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
votre nœud sera alors défini sur False si l'utilisateur est connecté ou false si l'utilisateur n'est pas correctement connecté.
version Kotlin
si vous utilisez Kotlin, procédez comme suit:
//properties
var firebaseAuth: FirebaseAuth? = null
var mAuthListener: FirebaseAuth.AuthStateListener? = null
//in onCreate function
firebaseAuth = FirebaseAuth.getInstance()
mAuthListener = FirebaseAuth.AuthStateListener() {
fun onAuthStateChanged(@NonNull firebaseAuth:FirebaseAuth) {
val user = FirebaseAuth.getInstance().getCurrentUser()
if (user != null)
{
val intent = Intent(this@LoginActivity, MainActivity::class.Java)
startActivity(intent)
finish()
}
}
}