我正在使用 Express.js 开发 Node.js 应用程序,并且遇到了 request.session.user 返回未定义的问题,即使我已经正确配置了会话中间件。我正在寻找有关如何调试和解决此问题的指导。
我已经使用 Express-Session 中间件设置了 Express.js 应用程序来管理用户会话。当用户登录时,我将他们的用户数据存储在会话对象中,如下所示
const loginUser = asyncErrorHandler(异步(请求,响应,下一个)=> {
const { email, password } = request.body
const user = await User.findOne({ email }).select("+password")
//console.log(user)
if (!user) {
return response.status(401).json({
success: false,
message: "Invalid Email"
})
}
// Compare the provided password with the stored password
const hashPassword = await bcrypt.compare(password, user.password)
console.log(hashPassword)
if (!hashPassword) {
return response.status(401).json({
success: false,
message: "Invalid Password"
})
}
else {
request.session.user = {
id: user.id,
email: user.email
}
return response.status(200).json({
success: false,
message: "User Login Successfully",
data: user,
})
}
})
我可以在 console.log(request.session) 中看到会话对象,并且它似乎已使用会话 cookie 和其他会话选项正确配置。但是,当我尝试在后续请求中访问 request.session.user 时,它返回未定义。
const isAuthenticated = asyncErrorHandler(async (请求、响应、下一个) => {
console.log(请求.会话) console.log(request.session.user)
if (request.session && request.session.user) { 用户已登录
下一个(); 别的 { 用户未登录;根据需要进行处理(例如,重定向到登录) 响应.status(401).json({ 消息:“未经授权” }) }
})
几个可以帮助您解决问题的步骤:
express-session
中间件吗?request.session.user
。request.session.id
后通过记录
request.session.user