未找到 Express.js 会话

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

我在 Express.js 应用程序中遇到会话管理问题。成功登录后,会创建会话并将其存储在 MongoDB 中,但后续请求会显示“未找到会话或用户未经过身份验证”错误。

我已验证会话中间件是否已正确配置,并且会话数据似乎已正确存储。是什么原因导致此问题?如何有效地解决该问题?

这是我的App.js

const store = new MongoDBStore({
  uri: 'mongodb://localhost:27017/mentorship',
  collection: 'sessions',
});

// Express session middleware
app.use(
  session({
    secret: 'secret',
    resave: false,
    saveUninitialized: false,
    store: store,
    cookie: { maxAge: 3600000 }, // Session expires in 1 hour (adjust as needed)
  })
);

// Test route
app.use("/api", apirouter);

这是我的控制器

  getUserInfo: async (req, res) => {
    try {
      console.log('Request received for fetching user info');
  
      if (req.session && req.session.user) {
        console.log('Session found. User is authenticated');
  
        const { _id, email } = req.session.user;
        console.log('Fetching user details from the database');
        console.log('User ID from session:', _id); // Log user ID from session
        console.log('User email from session:', email); // Log user email from session
        const user = await User.findById(_id);
  
        if (!user) {
          console.log('User not found in the database');
          return res.status(404).json({ message: 'User not found' });
        }
  
        const userInfo = { _id: user._id, email: user.email, username: user.username };
        console.log('User info fetched successfully');
        res.status(200).json(userInfo); // Return user info stored in session along with username
      } else {
        console.log('Session not found or user not authenticated');
        res.status(401).json({ message: 'User not authenticated' });
      }
    } catch (error) {
      console.error('Error fetching user info:', error);
      res.status(500).json({ message: 'Server error' });
    }
  }

始终:“未找到会话或用户未经过身份验证”

node.js session
1个回答
0
投票

听起来您忘记在会话之上实现身份验证。 存储会话不会自动将

user
对象放入您的会话中。

这就是为什么这个条件

if (req.session && req.session.user) {
是假的,因此你会看到
console.log('Session not found or user not authenticated');

首先您需要在您的应用程序中实现身份验证流程。您可以使用会话docs中的示例。

或者您可以使用 passport.js

© www.soinside.com 2019 - 2024. All rights reserved.