我已使用电子邮件和密码实施了Firebase身份验证,这是我的代码
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 :(得分: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);
}
}
答案 1 :(得分:0)
我使用Firebase 9.6.1复制并运行了您的代码。当我将电子邮件地址传递给之前从未使用过的createUserWithEmailAndPassword()
时,sendEmailVerification()
已成功完成。我观察了当我使用我之前创建的用户的电子邮件地址然后在Firebase控制台中删除时报告的失败。当您使用之前使用过的地址然后删除时,您是否看到了失败?
请注意,createUserWithEmailAndPassword()不仅可以创建用户,而且如果成功,还会为用户签名。当存在已登录用户时创建和登录时,似乎存在Firebase错误与注销和清除前一个用户的缓存有关。
通过在createUserWithEmailAndPassword()
之前调用signOut(),我能够让您的代码适用于以前登录过和以后删除过的用户。