我想创建一个登录名,用户只需要输入他/她的邮件地址并通过电子邮件进行验证。使用firebase到目前为止我有这个代码:
用户在将邮件放入字段后单击按钮进行登录。我尝试创建一个新帐户(密码是随机的,因为我不需要它)。如果它不存在我发送验证邮件。如果帐户存在,我会检查 checkIfVerifiedUser ,如果用户通过点击邮件验证了帐户。
firebaseAuth.createUserWithEmailAndPassword(email, Math.random() + "").addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = firebaseAuth.getCurrentUser();
user.sendEmailVerification().addOnCompleteListener((Activity) context, new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Toast.makeText(context, "we sent a mail, please verify", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "error", Toast.LENGTH_LONG).show();
}
}
});
checkIfVerifiedUser(email);
} else {
progressDialog.dismiss();
try {
throw task.getException();
} catch (FirebaseAuthUserCollisionException e) {
// In case the account already exists
checkIfVerifiedUser(email);
} catch (Exception e) {
Toast.makeText(context, R.string.error_auth, Toast.LENGTH_SHORT).show();
}
}
} });
这是我打电话的方法:
private void checkIfVerifiedUser(String email){
final FirebaseUser user = firebaseAuth.getCurrentUser();
Intent intent = new Intent(context, HomeActivity.class);
if(user != null){
user.reload();
// If the user is created, we check if the account is verified
if(user.isEmailVerified()) {
intent.putExtra(IntentEnum.ALREADYREGISTERED.getCode(), true);
}else{
intent.putExtra(IntentEnum.ALREADYREGISTERED.getCode(), false);
}
}else{
intent.putExtra(IntentEnum.ALREADYREGISTERED.getCode(), false);
}
---rest of code---
}
问题是我要么得到firebaseAuth.getCurrentUser()== null或者user.isEmailVerified()总是为false(即使我点击了我收到的电子邮件中的链接)。
有人可以帮我吗? 谢谢!
答案 0 :(得分:0)
要解决此问题,您需要在checkIfVerifiedUser()
方法内和if语句中调用onComplete()
方法。
希望它有所帮助。