我在 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' });
}
}
始终:“未找到会话或用户未经过身份验证”
听起来您忘记在会话之上实现身份验证。 存储会话不会自动将
user
对象放入您的会话中。
这就是为什么这个条件
if (req.session && req.session.user) {
是假的,因此你会看到console.log('Session not found or user not authenticated');
。
首先您需要在您的应用程序中实现身份验证流程。您可以使用会话docs中的示例。
或者您可以使用 passport.js