我正在使用Firebase的isEmailVerified
方法验证电子邮件。以下是代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_verifying);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
mAuth=FirebaseAuth.getInstance();
spinner=(ProgressBar)findViewById(R.id.progressBar);
spinner.setVisibility(View.GONE);
Log.e("I am launched","hello");
if(user.isEmailVerified()==true){
Log.e("I am here","hello");
State state= new AccountSettingUp(this);
state.doAction();
} else {
Log.e("Maybe i am here","yes");
user.sendEmailVerification()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d("email", "Email sent.");
}
}
});
}
此处,else
代码只应在未验证电子邮件时运行。但是,即使在我验证电子邮件并重新启动活动后,if
语句也不是true
,并且会再次发送电子邮件。
答案 0 :(得分:4)
在Firebase身份验证的当前版本(10.0.1)中,此行为似乎是一个限制,可能是一个错误。 this related question报告了同样的问题。
我在电子邮件验证后尝试使用reload()用户数据。这没有任何帮助。如相关问题所述,似乎需要注销/登录才能获得新的电子邮件验证状态。
答案 1 :(得分:0)
对于firebase-auth:10.0.1,似乎无法实现。但是,解决方法是将用户注销并再次登录。登录后,isEmailVerified()函数将正常工作。
我做了注册活动
mAuth.createUserWithEmailAndPassword(Email, Password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
user = mAuth.getCurrentUser();
UserProfileChangeRequest profileChange = new UserProfileChangeRequest.Builder()
.setDisplayName(FirstName)
.build();
user.updateProfile(profileChange).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(getBaseContext(), "Thanks for signing up, " + FirstName + "! Please verify your email!", Toast.LENGTH_SHORT).show();
user.sendEmailVerification();
mAuth.signOut();
Intent a = new Intent(getBaseContext(),Login_Activity.class);
startActivity(a);
}
else {
Toast.makeText(getBaseContext(),"Failed to create username",Toast.LENGTH_SHORT).show();
}
}
});
}
else{
Toast.makeText(getBaseContext(),"Failed",Toast.LENGTH_SHORT).show();
}
}
});
如'.updateProfile'代码的'task.isSuccessful()'部分所示,我做了一个'mAuth.signOut();'并在将其发送回登录屏幕之前通知他们验证他们的电子邮件。
在登录屏幕上,我做了一个简单的'if(user.isEmailVerified())'语句来检查验证。如果他们仍未经过验证,则会出现一个祝酒词,如果他们已经过验证,那么他们将进入下一个活动。
希望这有帮助!