javascript - Firebase 身份验证迁移
问题描述
我试图摆脱 Firebase 身份验证。所以我用他们的电子邮件、hashedPassword、saltKey 和所有其他必要信息导出了所有 firebase 用户。
毕竟,我将它们迁移到数据库并尝试使用 JWT 和 Express.js 实现身份验证流程。
我所做的是使用firebase-scrypt npm 使用从原始 firebase 应用程序获得的 saltkey 和 firebase auth 配置验证 hashedPassword。
无论我输入什么密码,它都被验证为真的,我无法让身份验证流程正常工作。
如果有人遇到这个问题并帮助我解决这个问题,我真的很感激。
感谢您仔细查看。
下面附上ps代码
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)
不会获取现有的哈希值,但它会根据给定的密码和盐生成一个新的哈希值。根据给定密码生成新哈希后,您可以检查给定密码是否对该哈希有效。这总是正确的,因为哈希总是为输入密码生成:)
因此,您可能应该将该行更改为const hashedPassword = ...
从数据库加载哈希的内容。
推荐阅读
- twitter-bootstrap - 修复 Bootstrap 导航栏切换器
- python - 使用 wtforms 验证 - 检查 MongoDB 集合中的现有记录
- sql - SQL 检索时间范围内的第一次出现
- google-apps-script - 如何使用 Google Apps 脚本根据 MULTIPLE CONDITIONS 将行从一个电子表格选项卡移动到另一个选项卡?
- chatbot - 基于按钮的聊天机器人
- node.js - 如何为原始文件中的每 50000 行打印一个新文件
- javascript - angular 8 - 按数字过滤对象数组
- php - 当我已经有似乎被忽略的 php.ini 指令来执行此操作时,如何让 apache 将 php 错误写入 apache 错误日志?
- python - 检查已加入频道的特定用户
- vue.js - 受限视图的前端身份验证如何在 Vue (ft. nuxt) 等现代 FE 框架中工作?