好的,我正在制作一个博客,要求用户通过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('/'))
,但它没有工作
答案 0 :(得分:3)
这是可能发生的事情:
验证后调用firebase.auth().currentUser.emailVerified
时会更新 firebase.auth().currentUser.reload()
。但是auth.token.email_verified
从ID令牌中获取其值,该ID令牌在过期或强制刷新之前不会更新。因此,您可能需要致电firebase.auth().currentUser.getIdToken(true)
强制刷新以更新发送到Firebase数据库后端的令牌声明。