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

Posted

技术标签:

【中文标题】在 Android 上使用 Firebase 3.0 进行电子邮件验证【英文标题】:Email verification using Firebase 3.0 on Android 【发布时间】:2016-09-21 23:00:50 【问题描述】:

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

从图片中可以清楚地看出,一旦用户登录,他将在电子邮件中得到提示,以确认他的订阅。我自己订阅并在 Auth 选项卡的 users 部分进行了验证,我可以看到我的邮件 ID 和 firebase 生成的唯一用户 ID。这里缺少的是我的电子邮件 ID 的确认电子邮件。有人尝试过这个还是我尝试这个太早了?感谢您的帮助。

【问题讨论】:

为了验证行为,我什至尝试了另外两个邮件 ID,但无法收到任何验证电子邮件。 你的问题状态发生了变化;现在有一个更新的答案。 【参考方案1】:

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

【讨论】:

【参考方案2】:

更新

version 9.6 and higher of the Firebase SDK for Android 提供电子邮件验证。

原答案

电子邮件验证不适用于 Android。还回答了here,并提供了更多上下文。

【讨论】:

@FrankvanPuffelen:这个答案is being discussed on Meta。【参考方案3】:

Firebase 团队建议的替代方案

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

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

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

【讨论】:

【参考方案4】:

由于电子邮件验证仅适用于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");
            
        
    ;

【讨论】:

以上是关于在 Android 上使用 Firebase 3.0 进行电子邮件验证的主要内容,如果未能解决你的问题,请参考以下文章

android上的firebase设置

使用 Firebase 云功能和 Firestore 在 android 上验证购买 [关闭]

错误尝试通过 callign firebase.app() 使用未安装在您的 Android 项目上的 firebase 模块

使用 Firebase 或任何其他方式在 Android 设备上显示通知

使用 Firebase 和 cordova-plugin-firebase 在 Apache Cordova Android 应用程序上构建问题

我可以在 android studio 的片段上使用 Firebase 吗?