Javascript 如何使用bcrypt从数据库中检索加密密码?
我有一份带注册和登录表的申请表。我已经成功地将加密密码输入到数据库中,但是当我登录时想要比较密码时,我似乎无法让它工作。我将如何在我的login post方法中实现bcrypt 这是我成功存储密码的注册帖子:Javascript 如何使用bcrypt从数据库中检索加密密码?,javascript,node.js,express,bcrypt,Javascript,Node.js,Express,Bcrypt,我有一份带注册和登录表的申请表。我已经成功地将加密密码输入到数据库中,但是当我登录时想要比较密码时,我似乎无法让它工作。我将如何在我的login post方法中实现bcrypt 这是我成功存储密码的注册帖子: router.post('/register', (req, res) => { bcrypt.hash(req.body.password, 10).then((hash) => { let userData = req.body; let user = ne
router.post('/register', (req, res) => {
bcrypt.hash(req.body.password, 10).then((hash) => {
let userData = req.body;
let user = new User(userData);
user.password = hash;
user.save((error, registeredUser) => {
if (error) {
console.log(error);
} else {
let payload = {subject: registeredUser._id};
let token = jwt.sign(payload, 'secretKey');
res.status(200).send({token});
}
});
});
});
这是我的登录帖子:
router.post('/login', (req, res) => {
let userData = req.body;
User.findOne({email: userData.email}, (error, user) => {
if (error) {
console.log(error);
} else {
if(!user) {
res.status(401).send('Invalid Email');
} else
if (user.password !== userData.password) {
res.status(401).send('Invalid Password');
} else {
let payload = {subject: user._id};
let token = jwt.sign(payload, 'secretKey');
res.status(200).send({token});
}
}
});
});
router.post('/login', (req, res) => {
let userData = req.body;
User.findOne({email: userData.email}, (error, user) => {
if (error) {
console.log(error);
} else {
if(!user) {
res.status(401).send('Invalid Email');
} else {
bcrypt.compare(req.body.password, user.password, function (err, result) {
if (result == false) {
res.status(401).send('Invalid Password');
} else {
let payload = {subject: user._id};
let token = jwt.sign(payload, 'secretKey');
res.status(200).send({token});
}
});
}}
});
});
这里没有什么需要注意的
如果您使用的是
bcrypt
,则可以使用bcrypt.compare()
执行这些操作这里需要注意的几点
如果您使用的是
bcrypt
,则可以使用bcrypt.compare()
执行这些操作我找到了答案,现在正在成功比较散列密码。以下是新的登录帖子:
router.post('/login', (req, res) => {
let userData = req.body;
User.findOne({email: userData.email}, (error, user) => {
if (error) {
console.log(error);
} else {
if(!user) {
res.status(401).send('Invalid Email');
} else
if (user.password !== userData.password) {
res.status(401).send('Invalid Password');
} else {
let payload = {subject: user._id};
let token = jwt.sign(payload, 'secretKey');
res.status(200).send({token});
}
}
});
});
router.post('/login', (req, res) => {
let userData = req.body;
User.findOne({email: userData.email}, (error, user) => {
if (error) {
console.log(error);
} else {
if(!user) {
res.status(401).send('Invalid Email');
} else {
bcrypt.compare(req.body.password, user.password, function (err, result) {
if (result == false) {
res.status(401).send('Invalid Password');
} else {
let payload = {subject: user._id};
let token = jwt.sign(payload, 'secretKey');
res.status(200).send({token});
}
});
}}
});
});
我找到了答案,现在正在成功地比较散列密码。以下是新的登录帖子:
router.post('/login', (req, res) => {
let userData = req.body;
User.findOne({email: userData.email}, (error, user) => {
if (error) {
console.log(error);
} else {
if(!user) {
res.status(401).send('Invalid Email');
} else
if (user.password !== userData.password) {
res.status(401).send('Invalid Password');
} else {
let payload = {subject: user._id};
let token = jwt.sign(payload, 'secretKey');
res.status(200).send({token});
}
}
});
});
router.post('/login', (req, res) => {
let userData = req.body;
User.findOne({email: userData.email}, (error, user) => {
if (error) {
console.log(error);
} else {
if(!user) {
res.status(401).send('Invalid Email');
} else {
bcrypt.compare(req.body.password, user.password, function (err, result) {
if (result == false) {
res.status(401).send('Invalid Password');
} else {
let payload = {subject: user._id};
let token = jwt.sign(payload, 'secretKey');
res.status(200).send({token});
}
});
}}
});
});
我认为你做不到
==代码>哈希密码的比较。您是否尝试过使用bcrypt.compare(…)
?我认为你做不到==代码>哈希密码的比较。您是否尝试过使用bcrypt.compare(…)
?是的,我可能把问题的措辞弄错了。我不是想解密密码,我只是想比较一下。我已经设法弄明白了如何在我的post方法中实现bcrypt.compare(),现在它工作正常了。谢谢你的建议和信息。很高兴听到@NiceuYea,我可能把我的问题措辞错了。我不是想解密密码,我只是想比较一下。我已经设法弄明白了如何在我的post方法中实现bcrypt.compare(),现在它工作正常了。谢谢你的建议和信息。很高兴听到@Niceu