javascript - Bcrypt.compareSync 总是返回 false
问题描述
嗨,所以我正在尝试使用 sequelize 创建我的第一个登录名,并且我正在努力处理散列和比较散列,它总是返回 false。由于我正在学习,我认为我在哈希或比较上做错了。我正在使用 SQL 数据库
这是我的登录代码,我正在使用快速会话和续集:
'processLogin': (req, res) => {
db.User.findOne({
where: {
email: req.body.email
}
})
.then(async user => {
var eSession = req.session.userLogin
let checkPass = await bcrypt.compare(req.body.password, user.password)
console.log(checkPass);
if(checkPass){
eSession = user;
res.send("Success");
}else{
res.render('login', {errors: [{
msg: "Incorrect password"
}]});
}
if(user == undefined){
res.render('login', {errors: [{
msg: "User not found, please Register"
}]});}
})
}
这里是我实际上在我的寄存器上散列密码的地方:
'save': async (req, res) => {
var a = [req.body.fullname, req.body.email, req.body.number, bcrypt.hashSync(req.body.password, 10), bcrypt.hashSync(req.body.repassword, 10)];
let errors = validationResult(req);
if(errors.isEmpty()){
db.User.create({
full_name: a[0],
email: a[1],
phone_number: a[2],
password: await bcrypt.hash(a[3], 10),
confirm_password: await bcrypt.hash(a[4], 10)
})
.then(users => {
res.send("succes!!");
})
}else{
res.render('register', { errors: errors.errors })
}
}
}
解决方案
安装同步为什么不尝试异步并等待它得到散列或解密。
在异步函数内部散列密码。
let hashedPassword = await hash(password, 10);
和内部用于比较密码的异步函数
let checkPass = await compare(password, foundUser.password);
推荐阅读
- android - 如何在我的应用程序中添加适当的大纲编辑文本?
- angularjs - angularjs主页遇到声明异常
- scala - 依赖于其他 3 个播放应用的播放应用
- spring-boot - 在谷歌云/应用引擎上部署我的 Spring Boot 应用程序后,无法打开 JDBC 连接以执行 DDL\n\tat
- python-3.x - 护士调度 CpSolver 卡在一些解决方案
- sql-server - 服务代理 - 队列中的消息切割器
- javascript - Jest - 如何使用模拟类实例
- mongodb - 我想将我的 MongoDB docker 连接到我的主机
- android - 创建具有相同共享密钥的密钥会导致不同的结果
- azure - 将数据从一个 Azure Application Insight 导入到另一个 Application Insight