【发布时间】:2022-01-02 11:10:17
【问题描述】:
您好,我正在尝试使用 bcriptjs 库来比较加密密码和数据库密码。
我正在使用“比较”方法。
我添加到方法中的值是:
- 首先,用户给我的密码。 (密码)
- 二、数据库的加密密码。 (pass_db)
但总是返回 false
const bcrypt = require('bcryptjs')
const create = (req, res) => {
const { email, password } = req.body;
if (password.length < 6) {
res.send({ msgType: "error", msg: "Contraseña almenos 6 caracteres" });
} else {
const hash = bcrypt.hashSync(password, 6);
db.query(
"INSERT INTO users (email, password) VALUES (?,?)",
[email, hash],
(err) => {
res.send({ msgType: "success", msg: "Usuario creado correctamente" });
}
);
}
};
//TODO Login dont work always return false
const login = (req, res) => {
//Password from req.body
const { email, password } = req.body;
db.query(
"SELECT password FROM users WHERE email = ?",
[email],
(err, result) => {
// Password encrypted from database
pass_db = result[0].password;
if(err){
res.send({msgType:'error', msg:'Incorrect Login'})
}
if(result.length > 0){
//Compare password from req.body with password encryted from database
const validate = bcrypt.compareSync(password, pass_db);
//Always false
console.log(validate);
if(validate){
res.send({msgType:'success', msg: "Correct login" })
}else{
res.send({msgType:'error', msg: "Incorrect email or password" });
}
}else{
res.send({msgType:'error', msg: "Incorrect email or password" });
}
}
);
};
我也试过这段代码,但没有成功。
bcrypt.hash(password, 6, function (err, hash) {
if (err) {
throw err;
}
bcrypt.compare(pass_db, hash, function (err, result) {
if (err) {
throw err;
}
console.log(result);
});
});
希望你能帮忙解决这个问题,谢谢。
【问题讨论】:
-
如果它的
require('bcrytpjs')错误应该是require('bcryptjs'),除此之外您是否检查过pass_db 和密码是预期值,也许您应该验证它们是否已设置,如果电子邮件未设置会发生什么找到了,服务器崩溃了吗? -
您在数据库中的加密/散列密码是否使用 bcrypt 创建并遵循此格式? github.com/kelektiv/node.bcrypt.js#hash-info
-
最好编辑你的问题以包含它(更好的格式,其他人会立即看到它)
-
@AlwaysLearning 我已经添加了create方法,你可以看到我是如何保存数据的(email, hash)
-
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
标签: javascript node.js reactjs bcryptjs