首页 文章

在Android上使用Firebase 3.0进行电子邮件验证

提问于
浏览
7

我知道我们可以使用Firebase Auth 3.0验证用户的电子邮件 . 我无法在Android上找到任何有关电子邮件验证的文档 . 我能够找到适用于iOS和网络的相同内容,但不适用于Android . 任何指向文档的链接都会有所帮助 .

Email Types

从图像中可以清楚地看到,一旦用户登录,他就会在电子邮件中暗示他确认他的订阅 . 我订阅了自己并在 Auth 标签的 users 部分进行了验证,我可以看到我的邮件ID和firebase生成了唯一的用户ID . 这里缺少的是我的电子邮件ID的确认电子邮件 . 有人试过这个还是我太早尝试这个?谢谢你的帮助 .

4 回答

  • 1

    更新

    电子邮件验证位于version 9.6 and higher of the Firebase SDK for Android .

    原始答案

    Android尚未提供电子邮件验证功能 . 还回答了here更多背景 .

  • 11

    现在,Firebase中提供了针对Android的电子邮件验证功能 . 请参阅此版本说明:https://firebase.google.com/support/release-notes/android#9.6

  • 13

    Firebase团队建议的替代方案

    您可以做的一件事是向Firebase数据库添加一个节点,其中包含所有电子邮件地址作为子节点 . 您应该使此节点仅公开可读(通过Firebase安全规则) .

    然后,在您的应用程序中,一旦用户注册/登录,您检查该用户的电子邮件是否在列表中,如果没有,您将其签名并将其踢出您的应用程序(作为奖励,您甚至可以在数据库中记录入侵者的电子邮件地址,以便稍后查看谁正在尝试访问您的应用程序 .

    如果您知道将要测试您的应用程序的人员的电子邮件ID,这将适用于初始测试,直到电子邮件验证进入Android .

  • 3

    由于电子邮件验证仅适用于 Email/Password authentication ,因此在注册成功后,发送它的最佳位置将在 createUserWithEmailAndPassword(...) 方法的 onComplete 方法中 .

    firebaseAuth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                sendVerificationEmail();
                             ....
    

    自定义 sendVerification 方法是:

    public void sendVerificationEmail() {
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    
        if (user != null) {
            user.sendEmailVerification()
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(SignUpActivity.this, "Signup successful. 
                                    Verification email sent", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
        }
    
    }
    

    然后,您可以通过以下方式检查用户是否已在您的应用中的任

    mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
              firebaseUser = firebaseAuth.getCurrentUser();
                if (firebaseUser != null ) {
                    Log.e(TAG, firebaseUser.isEmailVerified() ? "User is signed in and email is verified" : "Email is not verified");
                } else {
                    Log.e(TAG, "onAuthStateChanged:signed_out");
                }
            }
        };
    

相关问题