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

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

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

【问题讨论】:

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

标签: android firebase firebase-authentication email-verification


【解决方案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,并提供了更多上下文。

    【讨论】:

    【解决方案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");
                  }
              }
          };
      

      【讨论】:

        猜你喜欢
        • 2017-05-30
        • 2021-05-11
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-22
        • 2018-05-31
        相关资源
        最近更新 更多