繁体   English   中英

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

[英]Email verification using Firebase 3.0 on Android

我知道我们可以使用Firebase Auth 3.0验证用户的电子邮件。 我找不到有关Android上电子邮件验证的任何文档。 我可以在iOS和网络上找到相同的内容,但在Android上却找不到。 与文档的任何链接都将有所帮助。

电子邮件类型

从图像中可以清楚地看到,一旦用户登录,他将被告知电子邮件内容以确认其订阅。 我已经订阅了自己的邮件,并在“ 验证”标签的“ 用户”部分中进行了验证,并且可以看到我的邮件ID和Firebase生成的唯一用户ID。 这里缺少的是我的电子邮件ID的确认电子邮件。 有人尝试过这个吗,还是我为时过早? 谢谢你的帮助。

Firebase现在提供适用于Android的电子邮件验证。 请参阅此发行说明: https : //firebase.google.com/support/release-notes/android#9.6

更新资料

电子邮件验证在适用于Android的Firebase SDK 9.6和更高版本中可用。

原始答案

电子邮件验证不适用于Android。 在此处也提供了更多背景信息。

Firebase团队建议的替代方法

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

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

如果您知道在电子邮件验证进入Android之前将要测试您的应用程序的人员的电子邮件ID,则此方法将适用于初始测试。

由于电子邮件验证仅适用于Email/Password authentication ,因此,成功注册后,发送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");
            }
        }
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM