Firebase token.email_verified很奇怪

时间:2017-11-11 22:58:19

标签: javascript firebase firebase-authentication firebase-security

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

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

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为false),以便我可以更新我的UI并提示用户重新认证

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

编辑还有没有重新认证的客户端解决方案来更新后端验证吗?

修改我尝试了user.reload().then(() => window.location.replace('/')),但它没有工作

1 个答案:

答案 0 :(得分:3)

这是可能发生的事情:

验证后调用firebase.auth().currentUser.emailVerified时会更新

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