Firebase 身份验证迁移

Posted

技术标签:

【中文标题】Firebase 身份验证迁移【英文标题】:Firebase Authentication Migration 【发布时间】:2021-09-27 15:03:42 【问题描述】:

我试图摆脱 Firebase 身份验证。 因此,我导出了所有 firebase 用户及其电子邮件、hashedPassword、saltKey 以及所有其他必要信息。

毕竟,我将它们迁移到数据库并尝试使用 JWT 和 Express.js 实现身份验证流程。

我所做的是我使用firebase-scrypt npm 来验证 hashedPassword 与我从原始 firebase 应用程序获得的 saltkey 和 firebase auth 配置。

无论我输入什么作为密码,它都被验证为真,我无法使身份验证流程正常工作。

如果有人遇到这个问题并帮助我解决这个问题,我真的很感激。

感谢您仔细查看。

附言下面附上代码

import  FirebaseScrypt  from 'firebase-scrypt';
const hashConfig: FirebaseScryptOptions = 
  signerKey: 'xxxx',
  saltSeparator: 'xxxx',
  rounds: 8,
  memCost: 14
;
const scrypt = new FirebaseScrypt(hashConfig);
public async login(req: Request, res: Response) 
  const  email, password  = req.body;
  try 
    const user = await User.findOne(
      where: 
        email
      
    );

    const hashedPassword = await scrypt.hash(password, user.salt);
    const valid = await scrypt.verify(password, user.salt, hashedPassword);
    if (!valid) 
      res.status(400).send(AuthError.InvalidPassword);
      return;
    
    const token = AuthController.createToken(user.id);
    res.setHeader('token', AuthController.createCookie(token));
    res.send(user);
   catch (e) 
    res.status(400).send(AuthError.UserNotFound);
  

【问题讨论】:

【参考方案1】:

函数scrypt.hash(password, user.salt) 不会获取现有的哈希值,但它会根据给定的密码和盐生成一个新的哈希值。在根据给定密码生成新哈希后,检查给定密码是否对该哈希有效。这总是正确的,因为哈希总是为输入密码生成:)

因此,您可能应该将行 const hashedPassword = ... 更改为从数据库加载哈希的内容。

【讨论】:

以上是关于Firebase 身份验证迁移的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase 进行 Chrome 扩展程序身份验证

使用邮件和密码通过 REST API [Firebase] 进行身份验证

将 Wordpress 用户导入 Firebase 身份验证

Firebase 身份验证导入是不是会保留给定的 UID?

具有 Firebase 身份验证的拦截器

如何针对 Firebase 验证身份验证令牌?