Android Firebase AuthStateListener已通过电子邮件验证

时间:2017-10-05 07:24:47

标签: java android firebase firebase-authentication

我有Firebase AuthStateListener的SignInActivity。

final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
final FirebaseAuth.AuthStateListener firebaseAuthListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(FirebaseAuth auth) {
        FirebaseUser user = auth.getCurrentUser();
        if (user != null && user.isEmailVerified()) {
            firebaseAuth.removeAuthStateListener(this);
            startActivity(new Intent(LoginActivity.this, MainActivity.class));
        }
    }
};
firebaseAuth.addAuthStateListener(firebaseAuthListener);

当我成功注册一个新帐户时,我setVisibity(View.Visible)一个带有EditTextEmail&的验证页面活动内VerifyButton(如果有人想重新发送电子邮件验证)。

我想要做的是当我从我的电子邮件帐户验证我的电子邮件时,我希望该页面自动启动MainActivity,而不是仅仅在我的LoginActivity中保持闲置状态,例如短信验证,在短信中收到验证码,该应用会读取短信并导航至MainActivity。是否可以通过电子邮件验证实现此目的?因为即使点击了我的电子邮件中的验证链接,FirebaseAuthState也从未改变过。

我需要像OnFirebaseAuthUserEmailVerifiedListener

这样的东西

我是firebase的新手,请告诉我如何实现这个目标或者如果不可能的话。

2 个答案:

答案 0 :(得分:2)

This link非常有用。

  

因为即使点击了我的电子邮件中的验证链接,FirebaseAuthState也从未改变过。

那是因为用户已缓存,您需要重新加载用户:

  

请注意,FirebaseUser对象会在应用会话中缓存,因此,如果您想要检查用户的验证状态,最好拨打.getCurrentUser().reload()进行更新。

答案 1 :(得分:0)

你需要这样的东西

     FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

    if (user.isEmailVerified())
    {
        // user is verified, so you can finish this activity or send user to activity which you want.
        finish();
        Toast.makeText(LoginActivity.this, "Successfully logged in", Toast.LENGTH_SHORT).show();
    }
    else
    {
        // email is not verified, so just prompt the message to the user and restart this activity.


        sendVerificationEmail();

    }
}

获取 email验证

的方法
private void sendVerificationEmail(){

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    user.sendEmailVerification()
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        // email sent
            // after email is sent just logout the user and finish this activity
                        FirebaseAuth.getInstance().signOut();
                        startActivity(new Intent(SignupActivity.this, LoginActivity.class));
                        finish();
                    }
                    else{
                        // email not sent, so display message and restart the activity or do whatever you wish to do

                    }
                }
    });
}

希望这会对你有所帮助。