2016-10-14 3 views
0

J'ai mis en place l'authentification Firebase avec e-mail et mot de passe, voici mon codecom.google.firebase.FireBaseException: une erreur interne s'est produite. [USER_NOT_FOUND]

mFirebaseAuth.createUserWithEmailAndPassword(edtEmail.getText().toString(), edtPassword.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       if (task.isSuccessful()) { 
        FirebaseUser user = task.getResult().getUser(); 
        Toast.makeText(RegisterActivity.this, "User registered successfully " + user.getEmail(), Toast.LENGTH_SHORT).show(); 

        user.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() { 
         @Override 
         public void onComplete(@NonNull Task<Void> task) { 
          if (task.isSuccessful()) { 
           finish(); 
           Log.e("RegisterActivity", "onComplete: " + task.getResult().toString()); 
          } else 
           Log.e("RegisterActivity", "onComplete: " + task.getException().toString()); 
         } 
        }); 
       } else { 
        Toast.makeText(RegisterActivity.this, task.getException().toString(), Toast.LENGTH_SHORT).show(); 
       } 

      } 
     }); 

Après avoir obtenu avec succès enregistré je suis l'envoi du courrier de confirmation à l'utilisateur, mais obtenir cette erreur.

com.google.firebase.FirebaseException: An internal error has occurred. [ USER_NOT_FOUND ] 

J'ai vérifié dans firebase aussi, mon utilisateur est enregistré et il est disponible là-bas, mais de toute façon je ne suis pas en mesure d'envoyer du courrier de confirmation.

+0

Parfois, il faut un peu plus de temps pour créer un utilisateur dans Firebase afin que votre utilisateur ne soit probablement pas créé lorsque vous essayez de lui envoyer un e-mail. –

+0

mais dans toast je reçois 'user.getEmail()', si l'utilisateur n'est pas créé je ne devrais pas obtenir l'adresse e-mail aussi. –

+0

Obtenez-vous le même résultat si vous remplacez 'user = task.getResult(). GetUser()' avec 'user = mFirebaseAuth.getCurrentUser()'? –

Répondre

0

J'ai copié et exécuté votre code avec Firebase 9.6.1. Lorsque j'ai passé une adresse e-mail à createUserWithEmailAndPassword() qui n'avait jamais été utilisée auparavant, sendEmailVerification() s'est terminée avec succès. J'ai observé l'échec que vous avez signalé lorsque j'ai utilisé une adresse e-mail pour un utilisateur que j'avais précédemment créé puis supprimé sur la console Firebase. Voyez-vous l'échec lorsque vous utilisez des adresses que vous avez déjà utilisées, puis supprimées? Notez que createUserWithEmailAndPassword() crée non seulement l'utilisateur, mais aussi, en cas de réussite, l'utilisateur. Lorsque la création et la connexion se produisent lorsqu'il existe un utilisateur connecté existant, il semble y avoir un problème lié à la base de données Firebase. pour se déconnecter et effacer le cache pour l'utilisateur précédent.

J'ai été en mesure de faire fonctionner votre code pour un utilisateur précédemment connecté et supprimé plus tard en appelant signOut() avant createUserWithEmailAndPassword().

0

Vous devez utiliser AuthStateListener() pour savoir à quel moment un utilisateur est connecté pour vous assurer que l'utilisateur a créé et connecté avec succès, puis vous pouvez vérifier votre utilisateur.

private FirebaseAuth.AuthStateListener mAuthListener; 

mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       // User is signed in 

      VerifyYourUserWithEmail(); 


      } else { 
       // User is signed out 
       Log.d(TAG, "onAuthStateChanged:signed_out"); 
      } 
      // ... 
     } 
    }; 

@Override 
public void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (mAuthListener != null) { 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 
} 
+2

Mais à quoi sert le courrier de vérification après la connexion de l'utilisateur? Il devrait être envoyé après l'inscription et l'utilisateur devrait être autorisé à se connecter correctement? –