web-dev-qa-db-fra.com

Firebase: comment vérifier si l'utilisateur est connecté?

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: enter image description here

Toutes les directions ici.

16
dsharew

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);
15
ataulm

Je pense que cela fonctionne comme:

FirebaseAuth.getInstance().getCurrentUser()

Il doit retourner null si un utilisateur n'est pas connecté.

17
Ashiq Muhammed

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é.

4
RileyManda

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()
            }
        }
    }
0
Oscar