Javascript Firebase token.email\u验证异常
好的,我正在写一个博客,要求用户通过firebase登录。要发表评论,他们的电子邮件必须经过验证 我知道如何验证电子邮件,我是用我的测试帐户验证的。当我在控制台上打字时Javascript Firebase token.email\u验证异常,javascript,firebase,firebase-authentication,firebase-security,Javascript,Firebase,Firebase Authentication,Firebase Security,好的,我正在写一个博客,要求用户通过firebase登录。要发表评论,他们的电子邮件必须经过验证 我知道如何验证电子邮件,我是用我的测试帐户验证的。当我在控制台上打字时 firebase.auth().currentUser.emailVerified 它返回true,所以是的,我的电子邮件被验证了 但是注释.validate规则要求验证用户,如下所示: auth.token.email_verified === true 但是它不起作用,所以我把它取下来,它又开始起作用了 读了一点书后,我
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\u verified==true
为false),以便更新我的UI并提示用户重新验证
基本上,我如何知道客户端何时未更新auth.token.email\u verified===true
编辑是否有不经重新验证的客户端解决方案更新后端验证
编辑我尝试了
user.reload()。然后(()=>window.location.replace('/'))
但它不起作用这是可能发生的情况:
验证后调用
firebase.auth().currentUser.emailVerified().currentUser.reload()
时更新firebase.auth().currentUser.reload()
。但是,auth.token.email\u verified
从ID令牌获取其值,该ID令牌在过期或您强制刷新之前不会更新。因此,您可能必须调用firebase.auth().currentUser.getIdToken(true)
来强制刷新以更新发送到firebase数据库后端的令牌声明。Yikes…更混乱的代码,由firebase提供给您。为什么用户单击验证链接时firebase不能自动进行更新?这让我花了几天时间才弄明白我的代码和安全规则出了什么问题。在经历了这么多的尝试和错误之后,只有我意识到这是一封未经验证的F*@+-~电子邮件,尽管它早就被验证过了!!!我在我的应用程序中使用这些代码行已经有一段时间了,直到最近才不再可靠。大多数时候我都会遇到权限错误。即使我在强制刷新和firestore更新之间等待10秒,我90%的时间都会在auth.token.email\u验证规则上出现权限错误(因为它尚未更新)。还有其他人有这个问题吗?