java - 如何在 Firebase 身份验证中反复检查用户是否通过验证?

标签 java android firebase firebase-authentication

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

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

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

EmailVerified = false;

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

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

最佳答案

你现在所做的根本不是一个好主意。相反,您应该使用 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?

关于java - 如何在 Firebase 身份验证中反复检查用户是否通过验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548809/

相关文章:

java - 无法使用 "HH:mm E d MMM YYYY"模式解析 DateTimeFormatter

android - 广告无法在 Android 中加载

Android 将透明颜色转换为可绘制对象

php - Firebase 如何发送主题通知

javascript - P5 for 循环不停

java - 我可以使用 @MapsId 为使用 JPA 的多个父级共享一对一实体吗

java - JSP 在 Web 浏览器中输出纯文本

android - 如何使用 AppCompat v21 在 android 中创建 float 操作按钮 (FAB)?

ios - 从 Firebase 获取 TableView 信息

Firebase crashlytics 没有记录所有崩溃