You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase使用PBKDF2_SHA256导入用户后登录提示INVALID_PASSWORD问题

解决Firebase Auth导入PBKDF2_SHA256哈希用户后登录失败的问题

可能的问题及修复步骤

1. 登录请求的URL或API Key错误

你的登录请求URL包含identitytoolkit.googleapis.com,这是生产环境域名,本地模拟器无需该前缀。同时API Key使用了无效的asdf,需要替换为你Firebase项目的实际Web API Key(可在Firebase控制台「项目设置」→「通用」中找到)。

修改后的登录请求URL应为:

http://localhost:9099/v1/accounts:signInWithPassword?key=你的实际API Key

2. 未启用Email/Password登录提供商

确保在Firebase控制台或本地模拟器的Auth配置中,已开启Email/Password登录方式:

  • 登录Firebase控制台,进入「Authentication」→「登录方法」,启用Email/Password
  • 若使用本地模拟器,可通过模拟器UI(通常是http://localhost:4000/auth)检查配置

3. 哈希值传递格式问题

虽然Firebase Admin SDK支持传递Buffer类型的passwordHash和passwordSalt,但部分场景下可能存在编码兼容问题。尝试将生成的哈希和盐转为Base64字符串后再导入:

修改代码中的哈希生成部分:

const passwordHash = crypto.pbkdf2Sync(
  Buffer.from(passwordStr, "utf-8"),
  salt,
  rounds,
  32,
  "sha256"
).toString('base64');
const passwordSaltStr = salt.toString('base64');

const importResult = await getAuth().importUsers(
  [{ email, passwordHash: passwordHash, passwordSalt: passwordSaltStr, uid: "123456" }],
  {
    hash: { algorithm: "PBKDF2_SHA256", rounds },
  },
);

4. 重复测试导致用户数据冲突

如果测试重复运行,固定的uid和email会导致用户已存在。可在测试前清理用户,或添加mergeExisting: true参数覆盖现有用户:

const importResult = await getAuth().importUsers(
  [{ email, passwordHash: passwordHash, passwordSalt: passwordSaltStr, uid: "123456" }],
  {
    hash: { algorithm: "PBKDF2_SHA256", rounds },
    mergeExisting: true // 覆盖已存在的用户
  },
);

验证哈希一致性(可选)

手动验证你生成的哈希是否与Firebase的计算结果一致:

  1. 使用Firebase Admin SDK生成一个测试用户,密码为Test123();
  2. 导出该用户的passwordHash和passwordSalt
  3. 对比你自己用pbkdf2Sync生成的哈希,确认参数(轮次、盐、哈希长度、算法)完全一致

内容的提问来源于stack exchange,提问作者user2529173

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:35:06