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

使用firebase身份验证的电子邮件firebase运行不正确?

澹台新知
2023-03-14

我使用Firebase身份验证和电子邮件验证来实现用户注册,如下所示:

private void register(String email, String password) {
    FirebaseAuth auth FirebaseAuth.getInstance();

        auth.createUserWithEmailAndPassword(email, password)
            .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                    public void onSuccess(AuthResult authResult) {

                        // is user registered yet?
                        if (authResult.getUser() != null) {

                            // yes, but email is not verified yet. so send verication link
                            if (!authResult.getUser().isEmailVerified()){
                                final FirebaseUser user = authResult.getUser();
                                
                                user.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {

                                        if (task.isSuccessful()) {
                                            Toast.makeText(getApplicationContext(),
                                                    "Verification link has been sent to " + user.getEmail(), Toast.LENGTH_SHORT).show();
                                        } else {
                                            Toast.makeText(getApplicationContext(), "Error: cannot send verification link.", Toast.LENGTH_SHORT).show();
                                        }
                                    }
                                });
                            }
                            
                            // yes, and email is already verified 
                            else {
                                Intent iii = new Intent(getApplicationContext(), MainActivity.class());
                                startActivity(iii);
                               
                            }
                        }
                    }
                })
                // registration error....
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }

用户注册完成后,我可以在Firebase控制台内的Authentication菜单上看到电子邮件。然后我点击了电子邮件上的验证链接,在浏览器上得到了这样的消息:

FirebaseUser user = auth.getCurrentUser();
return user.isEmailVerified();

返回false。所以电子邮件验证过程没有成功完成。这里怎么了?

我使用的是CompilesDKVersion29和Firebase-Auth19.3.2。

共有1个答案

寿卜鹰
2023-03-14

此代码正在工作

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {

    boolean emailVerified = user.isEmailVerified();
if(emailVerified ){
//email verified
}
}
 类似资料:
  • 如何使用firebase中的验证电子邮件验证使用电子邮件和密码登录的用户?这背后的逻辑是如何工作的,它在代码中会是什么样子? 解决方案/帮助:对于那些仍在寻找答案的人,我找到了这篇文章 堆栈溢出 帖子

  • 我也不会得到一个错误,如果我登录我的电子邮件和密码没有验证电子邮件。 非常感谢你事先的帮助。

  • 我是新的Firebase.我已经建立了一个Firebase实时数据库,如果读写规则设置为true,可以读写它。 我的身份验证有问题。我已经为谷歌和电子邮件加密码设置了身份验证。 我的目标是允许任何用户读取数据,但只有一个用户(我自己)可以在使用单个电子邮件地址和密码登录后写入数据。 如果我用谷歌登录,我可以成功地读写数据库(规则设置为: auth!=null)。 如果使用电子邮件地址和密码登录,我

  • 电子邮件验证+电子邮件/密码验证的使用不适用于在用户开始使用服务之前绝对需要电子邮件验证的服务。 让我用Google sign in First的一个例子来解释。 首先,用户登录他们的Google帐户(比如电子邮件是),并授权您的应用程序。然后使用通过它接收到的令牌创建一个凭据,并与Firebase交换这些令牌以将用户登录到Firebase。用户需要存在于Firebase中,您才能使用Fireba

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

  • 我可以在用户注册后发送一封验证邮件,但是用户会自动登录。在用户验证其电子邮件之前,我如何阻止他们登录?