Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase token.email\u验证异常_Javascript_Firebase_Firebase Authentication_Firebase Security - Fatal编程技术网

Javascript Firebase token.email\u验证异常

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登录。要发表评论,他们的电子邮件必须经过验证

我知道如何验证电子邮件,我是用我的测试帐户验证的。当我在控制台上打字时

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验证规则上出现权限错误(因为它尚未更新)。还有其他人有这个问题吗?