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

使用Firebase验证用户

陶璞
2023-03-14

我想创建一个登录,用户只需输入他/她的邮件地址,并通过电子邮件进行验证。使用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个答案

    柳浩大
    2023-03-14

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

    希望有帮助。

     类似资料:
    • 该应用程序应该接受用户电子邮件和密码,并使用Firebase身份验证作为后端。我使用像素2作为模拟器。每次应用程序处理登录功能时,它都会崩溃。 下面是Java文件和gradle文件 Java文件:

    • 我的应用/构建。格雷德尔: 在调试模式下,我成功地完成了auth。由Firebase授权。 输入电话号码 好的。工作正常。 但当我想在发布模式下执行此操作时,我会遇到下一个错误:

    • 我正在尝试设置OTP验证,所以当用户输入他们的电话号码时,我会向他们发送pin码,调用,我会收到代码pin,但问题是当调用时,我想转到另一个活动,用户可以输入代码pin进行验证,但根本不会调用,我不明白为什么。任何帮助都将不胜感激,谢谢。

    • 我正在开发一个简单的API来处理Firebase所做的认证——稍后用于Android客户端。 因此,在Firebase控制台中,我启用了Facebook和Google登录方法并创建了一个示例html页面,我可以使用它来测试登录方法-下一个函数由按钮调用: 接下来,我使用令牌,并通过jQuery的一个简单ajax调用将它发送到我的API: 下一站:API后端。网芯。 在启动下,我配置了 JwtBea

    • 每年,我都希望我的Firebase用户再次验证他们的帐户电子邮件,检查他们的电子邮件地址是否还在使用。 为了测试这一点,我向我(已验证)帐户发送了一封新的验证电子邮件。邮件已发送,但这并没有将我的,这也是在重新加载和应用程序之后。 有人知道是否可以将设置为false,一旦它完全为true,如果是这样,如何做到这一点?

    • 我正在创建一个生产应用程序。 现在我已经创建了我的的一部分 此在登录时会生成一个对象,但我不热衷于通过HTTP标头发送未加密/未加密。 为了让您了解我的: 登录时: 正如您现在看到的(因为我还不确定如何处理它),我只查找用户名,然后检查用户名是否存在。 我的问题很简单,如何加密密码,然后在密码到达API后进行验证?