javascript - 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 自动完成吗?我错过了什么?请帮忙?
解决方案
您的应用程序代码中有关 Firebase 身份验证用户的所有信息均取自 ID 令牌。此 ID 令牌有效期为 1 小时,并在到期前约 5 分钟由 SDK 自动刷新。在刷新令牌之前,它可能不会反映emailVerified
服务器上该用户配置文件的最新值或其他信息。
您需要强制刷新令牌确实很正常,以便在自动刷新之前获得更新的状态。当你这样做时,你不应该打电话admin.auth().updateUser(...)
。
推荐阅读
- sql - rails 6 App中的ORDER BY和DISTINCT ON问题
- tensorflow - 自定义 NER Bi-LSTM 模型过拟合
- mongodb - 没有子类别的 MongoDB 类别
- javascript - internal/modules/cjs/loader.js:883 throw err(解决方案不起作用)
- jmeter - 使用 JMeter Csv 配置跳过 CSV 中的空白行
- node.js - Telephony Bot 在 nodejs 中使用 botframework
- kotlin - 为什么 Kotlin 协程需要更长的时间
- sql - 如何在 PostgreSQL 中将一个范围分成同质的子范围?
- java - 致命异常:主进程:com.example.todoapp,PID:14053 java.lang.NullPointerException
- java - 需要从字符串中提取 3 个值