【问题标题】:How do I repeatedly check if the user is verified in the Firebase Authentication?如何反复检查用户是否在 Firebase 身份验证中得到验证?
【发布时间】:2019-12-31 22:19:21
【问题描述】:

我希望程序反复检查用户是否在 Firebase 身份验证中通过验证,直到通过。例如,当用户在我的应用程序上创建帐户时,程序会切换到新的活动,等待用户通过验证,然后自动继续进入下一个活动。

我尝试使用do while 循环来执行此操作,但不幸的是,程序冻结并停留在黑屏状态。在此过程中我从未遇到任何错误消息。

我用这几行代码尝试了这个程序:

EmailVerified = false;

do {
    if (mAuth.getCurrentUser().isEmailVerified()) {
        EmailVerified = true;
        Intent intent = new Intent(VerificationEmailPage.this, MainActivity.class);
        startActivity(intent);
    }
} while (!EmailVerified);

这样做会导致 Activity 无法加载,并且只是变黑。似乎在活动中没有执行其他代码。我需要加载活动并不断检查用户是否已通过验证,然后切换到下一个活动。

【问题讨论】:

  • 这基本上是一个无限循环。正如@Doug 提到的,当用户登录时检查它。就像 user.isEmailVerified()

标签: java android firebase firebase-authentication


【解决方案1】:

你现在做的根本不是一个好主意。相反,您应该使用AuthStateListener 来了解用户何时登录。

mAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            // Sign in logic here.
        }
    }
};

// activate it:
FirebaseAuth.getInstance().addAuthStateListener(mAuthListener);

// deactivate it:
FirebaseAuth.getInstance().removeAuthStateListener(mAuthListener);


监听器将在用户登录或退出时被调用,直到监听器被移除。

详细了解它的工作原理:How does the firebase AuthStateListener work?

【讨论】:

  • 监听器开头的mAuthListener是什么?对我来说,这似乎是一个变量。
  • 你把它喂给 addAuthStateListener() 来激活它,然后再喂给 removeAuthStateListener() 来停止它。
  • 对不起,如果我不明白,我对 Firebase 还是很陌生,我理解的是这个监听器会检查用户是否登录,它会执行里面的代码。我要做的是不断检查用户是否在用户注册后通过验证。
  • 监听器不断地对用户的状态做出反应。您不应该为此编写循环。这显然对您的页面产生了不好的影响。
  • 我仍然不建议这样做,因为循环轮询会浪费 CPU 和电池。使用侦听器获得更高效、更易于实施的方法。
【解决方案2】:

Doug's answer 为基础,这是做你想做的最好的方法:

  1. 登录用户(无论是通过登录还是创建帐户)。
  2. 启动“加载”活动,此活动使用FirebaseAuth.AuthStateListener 获取当前用户。
  3. onAuthStateChanged 处理程序中,检查firebaseAuth.getCurrentUser().isEmailVerified()
  4. 如果用户通过验证,则将其发送到下一个活动。
  5. 如果没有,请显示要求用户发送验证电子邮件的 UI。
  6. 当用户按下发送按钮时,发送一封配置为指向您的应用程序的验证电子邮件(请参阅Passing State in Email Actions)。
  7. 当用户点击验证电子邮件中的 URL 时,再次检查他们的 isEmailVerified() 状态。
  8. 跳回第 4 步。

【讨论】:

  • 那么我将使用Dynamic Links
猜你喜欢
  • 2018-12-28
  • 2023-03-04
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多