当前位置: 首页 > 知识库问答 >
问题:

未在Firebase中验证电子邮件

邓昀
2023-03-14

我正在使用Firebase的isEmailVerified方法来验证电子邮件。以下是代码:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_verifying);
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    mAuth=FirebaseAuth.getInstance();
    spinner=(ProgressBar)findViewById(R.id.progressBar);
    spinner.setVisibility(View.GONE);
    Log.e("I am launched","hello");
    if(user.isEmailVerified()==true){
       Log.e("I am here","hello");
        State state= new AccountSettingUp(this);
       state.doAction();
   } else {
        Log.e("Maybe i am here","yes");
       user.sendEmailVerification()
               .addOnCompleteListener(new OnCompleteListener<Void>() {
                   @Override
                   public void onComplete(@NonNull Task<Void> task) {
                       if (task.isSuccessful()) {
                           Log.d("email", "Email sent.");
                       }
                   }
               });
   }

这里,< code>else代码应该只在电子邮件未经验证时运行。但是,即使在我验证了电子邮件并重新开始活动之后,< code>if语句仍不为< code>true,电子邮件将再次发送。

共有2个答案

仲鸿风
2023-03-14

对于 firebase-auth:10.0.1,这似乎是不可能的。但是,解决方法是注销用户并重新登录。登录后,isEmailVerified() 函数将正常工作。

我做了个报名活动

    mAuth.createUserWithEmailAndPassword(Email, Password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){
                            user = mAuth.getCurrentUser();
                            UserProfileChangeRequest profileChange = new UserProfileChangeRequest.Builder()
                                    .setDisplayName(FirstName)
                                    .build();

                            user.updateProfile(profileChange).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {

                                    if(task.isSuccessful()){
                                        Toast.makeText(getBaseContext(), "Thanks for signing up, " + FirstName + "! Please verify your email!", Toast.LENGTH_SHORT).show();
                                        user.sendEmailVerification();
                                        mAuth.signOut();
                                        Intent a = new Intent(getBaseContext(),Login_Activity.class);
                                        startActivity(a);
                                    }
                                    else {
                                        Toast.makeText(getBaseContext(),"Failed to create username",Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });

                        }
                        else{
                            Toast.makeText(getBaseContext(),"Failed",Toast.LENGTH_SHORT).show();
                        }
                    }
                });

如中的“task . issuccessuccess()”部分所示。“updateProfile”代码,我做了一个“mauth . sign out();”并通知他们在将他们发送回登录屏幕之前验证他们的电子邮件。

在登录屏幕上,我做了一个简单的“if(user.is电子邮件验证())”语句来检查验证。如果他们仍然没有被验证,将会出现一个祝酒词来提醒他们,如果他们被验证,那么他们将继续下一个活动。

希望这有帮助!

陈畅
2023-03-14

在Firebase身份验证的当前版本(10.0.1)中,这种行为似乎是一种限制,可能是一个错误。在这个相关问题中报告了相同的问题。

在电子邮件验证之后,我尝试重新加载()用户数据。那没有帮助。如相关问题中所述,似乎需要注销/登录才能获得新的电子邮件验证状态。

 类似资料:
  • 嗨,伙计们,我正在尝试在我的应用程序中进行自动登录,但在登录完成之前,我想知道用户是否验证了他的电子邮件或否。 问题是:即使我验证了我的帐户,代码也看不到这个并说是假的。 这是我的密码。 这条线总是假的,即使我验证了我的帐户。

  • 我在我的应用程序中使用Firebase认证,用户可以使用电子邮件和密码注册,他必须验证电子邮件。 用户收到验证邮件,但当他验证邮件并返回应用程序时,isEmailVerified()始终为false。所以我的应用程序仍然不允许用户使用所有功能,尽管事实上他已经验证了他的电子邮件。 但是如果他们注销并再次登录,isEmailVerified()立即返回true。但是注销用户然后重新登录是不是很好。

  • 我有一个关于firebase电子邮件验证工作的问题。 案例: 我的用户已登录我的网站(使用设备A)。 他们使用其他浏览器或设备(设备B)创建另一个帐户,但他们使用他已登录的浏览器和设备(设备A)打开电子邮件验证链接。 已经登录的用户(在设备A中)发生了什么?firebase是将它们签出还是只是验证新的电子邮件,但仍然与当前用户签入?

  • 我是Firebase的新手。我需要一种在注册过程中验证电子邮件地址的方法。未经验证,用户不应该自动登录。我可以添加什么代码来检查电子邮件是否经过验证。如果是,用户可以登录。如果不是,他们需要首先登录。请参阅下面的代码

  • 我的电子邮件验证有问题。我的错误是“用户为空”,因此它不会发送验证电子邮件,但会在控制台和My console.firebase.google中显示登录uid。com项目显示已注册的电子邮件。我应该更改什么,以便发送电子邮件,并且在用户验证其电子邮件之前不允许访问?我读过文件,但想不出来。提前谢谢你。

  • 问题内容: 我检查了用户是否通过电子邮件验证。但是,无论我发送并确认了多少电子邮件,验证状态仍为。检查时我做错什么了吗? 问题答案: 我如何实现此功能的方法是添加一个 带有时间间隔的,它将检查用户是否已通过验证,然后在完成验证后终止计时器。 检查您当前用户状态的功能: