【发布时间】:2018-11-28 23:43:14
【问题描述】:
我正在尝试构建一个登录页面,在该页面中我使用 Sequelize 从 mysql db 获取哈希密码,然后调用 bcrypt compare 对密码进行去哈希并将其与用户的登录输入进行比较以进行身份验证。
但是,bcrypt compare 的执行速度总是比返回值慢,导致值始终为“”。我知道这与异步行为有关,但我不知道如何正确编写此代码以使其工作。
authenticate: (req, res) => {
let userDetails = req.query;
User.findOne({
where: {
username: userDetails.username
}
})
.then((user) => {
// How can I make this so, correctPassword() finishes
// and then the authenticated variable will be either false or true?
let authenticated = correctPassword(userDetails.password, user.password);
return authenticated;
})
.then((authenticated) => {
// right now authenticated is "" in client side console.
res.send(authenticated);
})
.catch((error) => {
console.log('there was an error: ', error);
});
}
}
const correctPassword = (enteredPassword, originalPassword) => {
return bcrypt.compare(enteredPassword, originalPassword, (err, res) =>{
return res;
});
}
【问题讨论】:
标签: javascript node.js asynchronous sequelize.js bcrypt