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 数据库后端的令牌声明。
好的,我正在制作一个要求用户通过 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 数据库后端的令牌声明。