我试图摆脱firebase身份验证。所以我导出了所有firebase用户的电子邮件、hashedPassword、saltKey以及所有其他必要的信息。
毕竟,我将它们迁移到了数据库中,并尝试使用JWT和Express.js.实现身份验证流
我所做的是使用firebase scrypt-npm来验证hashedPassword和saltkey,以及我从原始firebase应用程序中获得的firebase auth配置。
无论我输入什么作为密码,它都被验证为真,我无法使身份验证流工作。
如果有人面对这个问题并帮助我解决这个问题,我真的很感激
谢谢你仔细看。
附在下方的p.s.代码
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);
}
}
函数scrypt.hash(password, user.salt)
不会获取现有的哈希,但它会根据给定的密码和salt生成一个新的哈希。根据给定的密码生成新的哈希后,您将检查给定的密码是否对该哈希有效。这总是正确的,因为哈希总是为输入密码生成的:(
因此,您可能应该将const hashedPassword = ...
行更改为从数据库加载散列的行。