2016-10-14 3 views
0

Я реализовал Firebase аутентификации с электронной почтой и паролем, вот мой кодcom.google.firebase.FirebaseException: Произошла внутренняя ошибка. [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(); 
       } 

      } 
     }); 

После того, как запомненный я посылаю почту подтверждения пользователя, но получаю эту ошибку.

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

Я проверил его в firebase также, мой пользователь зарегистрирован и доступен, но как-то я не могу отправить почту подтверждение.

+0

Иногда требуется некоторое время для создания пользователя в firebase, поэтому ваш пользователь, вероятно, не создан, когда вы пытаетесь отправить ему электронное письмо. –

+0

, но в тосте я получаю 'user.getEmail()', если пользователь не создан, я тоже не должен получать адрес электронной почты. –

+0

Получите тот же результат, если вы замените 'user = task.getResult(). GetUser()' с 'user = mFirebaseAuth.getCurrentUser()'? –

ответ

0

Я скопировал и выполнил код с Firebase 9.6.1. Когда я передал адрес электронной почты createUserWithEmailAndPassword(), который ранее не использовался, sendEmailVerification() успешно завершен. Я заметил сообщение об ошибке, о котором вы сообщали, когда я использовал адрес электронной почты для пользователя, который я ранее создал, а затем удалил на консоли Firebase. Вы видите сбой при использовании адресов, которые вы использовали ранее, а затем удалили?

Отметьте, что createUserWithEmailAndPassword() не только создает пользователя, но также и в случае успеха подписывает пользователя. Когда создание и вход в систему происходит, когда есть существующий пользователь, входящий в систему, существует ошибка, связанная с Firebase для выгрузки и очистки кэша для предыдущего пользователя.

Мне удалось заставить ваш код работать с ранее подписанным и позднее удаленным пользователем, позвонив signOut() до createUserWithEmailAndPassword().

0

Вы должны использовать AuthStateListener(), чтобы увидеть, когда пользователь выполнил вход, который обеспечит успешное создание и вход пользователя в систему, после чего вы сможете проверить своего пользователя.

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

Но что такое проверка почты после входа пользователя? Он должен быть отправлен после регистрации, а затем пользователю разрешено войти в систему? –

Смежные вопросы