将firebase oobCode解码为服务器端的用户

Posted

技术标签:

【中文标题】将firebase oobCode解码为服务器端的用户【英文标题】:decode firebase oobCode to user on server side 【发布时间】:2021-07-23 10:36:51 【问题描述】:

在自定义电子邮件流以及如何在后端解码用户方面存在一些问题。

查看流程:

用户:(网络应用)

    输入电子邮件地址并发送密码重置请求

服务器:

    使用 nodeJS SDK 生成 oobCode:admin.auth().generatePasswordResetLink(email);

    将自定义电子邮件中的链接发送给用户

用户:(网络应用)

    点击链接 -> www.example.com?oobCode=XYZ 客户端 SDK 验证的令牌未过期:firebase.auth().verifyPasswordResetCode("XYZ"); 如果有效,则将 oobCode 和新密码发送回服务器

现在出现问题的地方

我已将新密码和 oobCode 发送回服务器,以下是所需功能

服务器: 1。验证 oobCode 并获取用户 uid

我没有看到能够在后端对此进行解码以验证用户的方法我如何从后端的此代码中获取用户?看来我们可以生成但不能解码

【问题讨论】:

【参考方案1】:

尝试运行此代码来验证 oobCode 以进行密码重置:

const passResetUrl = `https://identitytoolkit.googleapis.com/v1/accounts:resetPassword?key=$firebaseWebApiKey`
return fetch(passResetUrl,  method: 'POST', body: JSON.stringify( "oobCode": oobCode, newPassword: "newpass" ), headers:  "Content-Type": "application/json"  ).then(async (res) => 
  const resJson = await res.json()
  //const email = resJson.email
  console.log(resJson)
  return "ok"
).catch((errVerifyingCode) => 
  console.log(errVerifyingCode)
  return "error"
)

可以在您的网络应用的 Firebase 配置中找到 firebaseWebApiKey。

如果解码是指获取用户身份验证对象,那么我认为这是不可能的。考虑在您生成的 url 中添加某种查询参数,这将帮助您的服务器识别用户。

如果您在服务器上验证 oob 代码,而不是如上所示使用 Firebase 客户端 SDK,您将收到用户的电子邮件作为响应。

【讨论】:

以上是关于将firebase oobCode解码为服务器端的用户的主要内容,如果未能解决你的问题,请参考以下文章

无法解码 Firebase JWT

无法解码来自客户端的握手请求

使用 Firebase 电子邮件验证的动态/深度链接?

web应用中浏览器与服务端的编码和解码

web应用中浏览器与服务端的编码和解码

web应用中浏览器与服务端的编码和解码