已验证的Firebase用户

时间:2017-09-11 08:04:14

标签: android firebase firebase-authentication

我想创建一个登录名,用户只需要输入他/她的邮件地址并通过电子邮件进行验证。使用firebase到目前为止我有这个代码:

  • 用户在将邮件放入字段后单击按钮进行登录。我尝试创建一个新帐户(密码是随机的,因为我不需要它)。如果它不存在我发送验证邮件。如果帐户存在,我会检查 checkIfVerifiedUser ,如果用户通过点击邮件验证了帐户。

    firebaseAuth.createUserWithEmailAndPassword(email, Math.random() + "").addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            user.sendEmailVerification().addOnCompleteListener((Activity) context, new OnCompleteListener() {
                        @Override
                        public void onComplete(@NonNull Task task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(context, "we sent a mail, please verify", Toast.LENGTH_LONG).show();
                            } else {
                                Toast.makeText(context, "error", Toast.LENGTH_LONG).show();
                            }
                        }
                    }); 
            checkIfVerifiedUser(email);
        } else {
            progressDialog.dismiss();
            try {
                throw task.getException();
            } catch (FirebaseAuthUserCollisionException e) {
          // In case the account already exists
                checkIfVerifiedUser(email);
            } catch (Exception e) {
                Toast.makeText(context, R.string.error_auth, Toast.LENGTH_SHORT).show();
            }
        }
    }    });
    

这是我打电话的方法:

private void checkIfVerifiedUser(String email){
        final FirebaseUser user = firebaseAuth.getCurrentUser();
        Intent intent = new Intent(context, HomeActivity.class);
        if(user != null){
            user.reload();
            // If the user is created, we check if the account is verified
            if(user.isEmailVerified()) {
                intent.putExtra(IntentEnum.ALREADYREGISTERED.getCode(), true);
            }else{
                intent.putExtra(IntentEnum.ALREADYREGISTERED.getCode(), false);
            }
        }else{
            intent.putExtra(IntentEnum.ALREADYREGISTERED.getCode(), false);
        }
        ---rest of code---
    }

问题是我要么得到firebaseAuth.getCurrentUser()== null或者user.isEmailVerified()总是为false(即使我点击了我收到的电子邮件中的链接)。

有人可以帮我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

要解决此问题,您需要在checkIfVerifiedUser()方法内和if语句中调用onComplete()方法。

希望它有所帮助。