这是我用来对登录应用程序进行验证的控制器代码的一部分,因此所有内容都已正确插入数据库及其加密权限中,但是当我尝试提交用户数据时,它无法验证密码,说错误位于 bcrypt.compare,我输入了正确的错误,即使我输入错误,它也应该将我重定向到主页,而不是程序崩溃。
Error: Illegal arguments: undefined, string
at _async (C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\node_modules\bcryptjs\dist\bcrypt.js:286:46)
at C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\node_modules\bcryptjs\dist\bcrypt.js:307:17
at new Promise (<anonymous>)
at Object.bcrypt.compare (C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\node_modules\bcryptjs\dist\bcrypt.js:306:20)
at C:\Users\CHINO\Desktop\Sistema-Pre-Escolar-Manitas-De-Oro-main (1)\Sistema-Pre-Escolar-Manitas-De-Oro-main\controllers\authController.js:31:6
at processTicksAndRejections (node:internal/process/task_queues:96:5)
AuthController.js:
exports.PostLogin = (req, res, next) => {
const password = req.body.password
const email = req.body.email
User.findOne({ where: {email : email}})
.then((user) => {
if (!user) {
flash.req("errors","Ha ocurrido un error al momento de ingresar el Correo electronico")
return res.redirect("/login")
}
bcrypt
.compare(password, user.password)
.then((result) =>{
if (result){
req.session.IsloggedIn=true
req.session.user = user
return req.session.save((err) =>
{
flash.req("errors","Contreseña invalida")
console.log("Error al momento de compare",err)
res.redirect("/")
});
}
res.redirect("/login")
});
正如 @epascarello 提到的,您将遍历用户集合并尝试根据您输入的电子邮件获取用户,该电子邮件应使用异步 - 等待调用进行包装。这样它就会等待用户被发现,然后将密码与
bcrypt
进行比较
exports.PostLogin = async (req, res, next) => {
const password = req.body.password
const email = req.body.email
await User.findOne({ where: {email : email}})
.then((user) => {
bcrypt
.compare(password, user.password)
.then((result) =>{
if (result){
req.session.IsloggedIn=true
req.session.user = user
return req.session.save((err) =>
{
flash.req("errors","Contreseña invalida")
console.log("Error al momento de compare",err)
res.redirect("/")
});
}
res.redirect("/login")
});