即使会话配置正确,Express.js request.session.user也会返回未定义

问题描述 投票:0回答:1

我正在使用 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({ 消息:“未经授权” }) }

})

node.js reactjs mongodb express express-session
1个回答
0
投票

几个可以帮助您解决问题的步骤:

  1. 您配置了
    express-session
    中间件吗?
  2. 您是否仔细检查过在路由处理程序之前使用会话中间件。它应该包含在您尝试访问的路线之前
    request.session.user
  3. 在您的loginUser中间件中,确保正在创建会话并生成会话ID。您可以在设置
    request.session.id
    后通过记录
    request.session.user
  4. 来检查这一点
© www.soinside.com 2019 - 2024. All rights reserved.