Firebase token.email_verified 变得奇怪

Firebase token.email_verified going weird

好的,我正在制作一个要求用户通过 firebase 登录的博客。要 post 评论,他们的电子邮件必须经过验证

我知道如何验证电子邮件,我是用我的测试帐户这样做的。当我输入控制台时

firebase.auth().currentUser.emailVerified

它返回 true,所以是的,我的电子邮件已通过验证。

但是评论 .validate 规则要求验证用户,如下所示:

auth.token.email_verified === true

但是它没有用,所以我删除了它,它又开始工作了

经过一番阅读,我意识到我必须

const credentials = firebase.auth.EmailAuthProvider.credential(
  user.email, password);

user.reauthenticateWithCredential(credentials)
  .then(() => { /* ... */ });

这使它完美地工作。解释是 Firebase 服务器显然需要一些时间来更新其后端验证,但重新验证会立即强制更新。

但是,我对如何要求用户重新验证自己感到困惑,因为我遇到了以下问题

我怎么知道用户何时被验证(firebase.auth().currentUser.emailValidated),同时 firebase 后端没有更新(auth.token.email_verified === true 是假的)以便我可以更新我的 UI 并提示用户重新验证

基本上我怎么知道 auth.token.email_verified === true 客户端什么时候还没有更新

edit 还有没有更新后端验证的无需重新验证的客户端解决方案?

编辑 我试过 user.reload().then(() => window.location.replace('/')) 但没用

这是可能发生的情况:

firebase.auth().currentUser.emailVerified在验证后调用firebase.auth().currentUser.reload()时更新。但是 auth.token.email_verified 从 ID 令牌获取其值,该令牌在过期或您强制刷新之前不会更新。因此,您可能必须调用 firebase.auth().currentUser.getIdToken(true) 强制刷新以更新发送到 Firebase 数据库后端的令牌声明。