Node.js 突然,在我的登录名nodejs上未定义密码
我正在处理项目中的一些其他事情,当我返回到登录屏幕时,我遇到了一个错误: 如果(!results | |!(等待bcrypt.compare)(密码,结果[0] (1.密码) TypeError:无法读取未定义的属性“password” 我已经阅读了我的代码好几次,我不明白问题出在哪里,有人知道它可能是什么吗 console.log(results)为我带来了一个[]正如预期的那样,因为我输入了一个无效的用户进行测试。奇怪的是,当输入的登录正确时,用户已通过身份验证,当用户未键入电子邮件或密码时,屏幕上会显示预期消息,通知信息缺失。仅当用户不正确时,身份验证不起作用,并且出现消息“密码未定义” 我的登录代码如下:Node.js 突然,在我的登录名nodejs上未定义密码,node.js,authentication,Node.js,Authentication,我正在处理项目中的一些其他事情,当我返回到登录屏幕时,我遇到了一个错误: 如果(!results | |!(等待bcrypt.compare)(密码,结果[0] (1.密码) TypeError:无法读取未定义的属性“password” 我已经阅读了我的代码好几次,我不明白问题出在哪里,有人知道它可能是什么吗 console.log(results)为我带来了一个[]正如预期的那样,因为我输入了一个无效的用户进行测试。奇怪的是,当输入的登录正确时,用户已通过身份验证,当用户未键入电子邮件或密码时
exports.login = (req, res) => {
try {
const{email, password} = req.body;
if(!email || !password){
res.clearCookie('myEmail');
return res.status(400).render('login',{
message:"A senha ou o e-mail precisa ser preenchido"
})
}
db.query('SELECT * FROM users2 WHERE email = ?' , [email], async(error,results) =>{
console.log(results);
if(!results || !(await bcrypt.compare(password,results[0].password))){
res.clearCookie('myEmail');
res.status(401).render('login', {
message:'Email or password is incorrect'
})
}else{
const id= results[0].id;
const token = jwt.sign({id: id}, process.env.JWT_SECRET,{
expiresIn:process.env.JWT_EXPIRES_IN
});
console.log("the token is"+token)
const cookieOptions ={
expires: new Date(
Date.now()+process.env.JWT_EXPIRES *24*60*60*1000
),
httpOnly:true
}
res.cookie('jwt',token,cookieOptions);
res.status(200).redirect("/userPage")
}
})
} catch (error) {
console.log(error)
}
}
重定向
router.get('/login',loggedUser,(req,res) =>{
res.render('login')
})
登录路由器中使用的loggedUser函数:
function loggedUser(req,res,next){
if(req.cookies['myEmail']!=null){
res.redirect('userPage')
}
return next()
}
您使用的是JSON中间件吗?app.use(express.json())默认情况下,express不会解析内容。我确实在app.js中使用了它,但出现问题的文件不是app.js。不过,我发现了错误。问题是,由于某些原因,node没有将空数组视为null,如果有人不在mysql中,尝试登录可能会导致错误。我在测试密码之前处理了这个问题,就是这样。谢谢你的回复