//登录用户和认证用户
exports.userLogin = async(req,res)=〉{ const { email,password } = req.body;
try {
const user = await User.findOne({ email: email }).select('+password');
if (!user) {
return res.status(404).json({ message: "Invalid Email" });
}
else if (user.password !== password)
{
return res.status(404).json({ message: "Invalid password" });
}
else {
const token = user.getJwtToken()
const options =
{
expires:new Date(Date.now()+process.env.COOKIE_EXPIRES_TIME*24*60*60*1000),
httpOnly:true,
Secure:true
}
res.status(201).cookie('token',token,options).json({
token: token,
user:user
});
}
} catch (err) {
console.log("something went wrong: " + err.message);
}
};
我在cookie中存储令牌,但它不工作,我检查cookie中的令牌是否为空
1条答案
按热度按时间aydmsdu91#
我在系统中使用
jsonwebtoken
,express
尝试了上面的场景,并且能够在响应头中看到cookie。也许问题出在第11行的方法user.getJwtToken()
上。如果您在第11行下面添加一个日志并检查token
的值是否得到任何值,那就太好了。尝试了下面的,它工作得很好。
此外,不建议在电子邮件不存在时显示
Invalid Email
,在密码不匹配时显示Invalid Password
,因为无论特定用户是否正在使用应用程序,都可能导致安全问题。因此,当上述任何一种情况为true
时,最好使用类似Invalid Email or Password
的东西。