firebase 如何在isEmailVerified()中获得“true”?

ttygqcqt  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(92)

我试着写我的信使。我需要在FirebaseAuth中注册新用户。为此,我需要在isEmailVerified()中得到"真"。我的程序发送电子邮件验证给当前用户。这意味着,当前用户不是空的,但在下一行我调用isEmailVerified(),它返回假,即使电子邮件是验证的。

mAuth.createUserWithEmailAndPassword(edEmail.getText().toString(), edPassword.getText().toString())
    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {

                FirebaseUser currentUser = mAuth.getCurrentUser();
                if (currentUser != null) {
                    sendEmailVerify(currentUser);

                    if (currentUser.isEmailVerified()) {
                        StartActivity(MainActivity.class);
                    }
                }else{
                    Toast.makeText(RegActivity.this, "Error", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(RegActivity.this, "email or password error", Toast.LENGTH_SHORT).show();
            }
        }
    });
private void sendEmailVerify(FirebaseUser currentUser) {
    currentUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {

            } else {

            }
        }
    });
}
public void StartActivity(Class activity) {
    Intent intent = new Intent(RegActivity.this, activity);
    startActivity(intent);
    RegActivity.this.finish();
}

我的程序必须等到你的电子邮件将被验证的时刻。

xdnvmnnf

xdnvmnnf1#

发送验证邮件并不会立即在用户配置文件中将电子邮件地址设置为已验证。毕竟,邮件可能会被退回或发送到用户不拥有的邮箱。只有当用户单击邮件中的链接时,Firebase才会将其电子邮件地址标记为已验证。
由于单击链接和随后的网页加载发生在应用程序之外,因此应用程序代码也不会在发生这种情况时得到通知。相反,应用程序中的配置文件仅在以下情况下才会获得更新的信息:

  • 用户注销并再次登录。
  • 每小时,ID令牌自动刷新。
  • 当您强制SDK刷新ID令牌时,例如通过[对当前用户调用reload()

最后一个选项为您提供了最大的灵活性,因为您可以在应用程序代码中确定何时强制执行此刷新。

  • 当应用程序/Activity处于活动状态时重新加载令牌,这通常会在用户切换到电子邮件客户端并返回后自动发生。
  • 向用户显示按钮以强制重新加载。
  • 当应用处于活动状态并等待用户点击链接时,强制定期重新加载令牌,比如说每隔几秒重新加载一次。考虑在这里实现exponential back-off,否则可能会达到速率限制。

为了获得最佳体验,您可以考虑多个或所有这些。

相关问题