com.google.firebase.FirebaseException:发生了内部错误。 [USER_NOT_FOUND]

时间:2016-10-14 12:45:10

标签: android firebase firebase-authentication

我已使用电子邮件和密码实施了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中检查了它,我的用户已注册并且可以在那里使用,但不知怎的,我无法发送确认邮件。

2 个答案:

答案 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(),我能够让您的代码适用于以前登录过和以后删除过的用户。