首页 > 解决方案 > firebase auth applyActionCode 方法不会将 emailVerified 变为 true

问题描述

我正在开发 Firebase 身份验证系统,向用户发送电子邮件以验证电子邮件地址。我最终让一切正常。用户注册并将电子邮件(带有链接)发送到注册的电子邮件地址。我使用自定义电子邮件操作处理程序 ( https://firebase.google.com/docs/auth/custom-email-handler ) 来响应点击链接。在我的 node.js express 路由上,我得到了 oobCode(firebase 文档说是“一次性代码,用于识别和验证请求”)并将其作为参数传递给 firebase.auth().applyActionCode(oobCode)解决时返回一个无效的承诺。请参阅下面的代码。

   firebase.auth().applyActionCode(oobCode)
        .then( () => {
          return admin.auth().updateUser(currentUser.uid, {
            emailVerified: true,
          })
        })
        .then( () => {
          return res.status(301).redirect(`../unps/${currentUser.uid}`)
        })
        .catch( (error) => {
          return res.status(500).json({ unp_error: `error message: ${error.message} - error code: 
   ${error.code}` })
        });

我对文档的理解是,如果解决了 applyActionCode 方法,会将 emailVerified 设置为 true,但即使没有错误,这也不会发生。我不得不调用 updateUser 将 emailVerified 更改为 true。如果将有效的 oobCode 作为参数提供,这不应该由方法 applyActionCode 自动完成吗?我错过了什么?请帮忙?

标签: javascriptfirebasefirebase-authentication

解决方案


您的应用程序代码中有关 Firebase 身份验证用户的所有信息均取自 ID 令牌。此 ID 令牌有效期为 1 小时,并在到期前约 5 分钟由 SDK 自动刷新。在刷新令牌之前,它可能不会反映emailVerified服务器上该用户配置文件的最新值或其他信息。

您需要强制刷新令牌确实很正常,以便在自动刷新之前获得更新的状态。当你这样做时,你不应该打电话admin.auth().updateUser(...)


推荐阅读