我在退出应用程序时遇到问题。
我正在使用MongoDB来存储我的会话。
我使用session.destroy注销,文件从数据库中的集合中删除。但是我仍然保持登录状态。浏览器中的cookie仍然存在,肯定会过期。我相信我的身份验证是使用浏览器中的cookie来检查身份验证,因为它仍然存在,它会让我保持登录状态。
这是我的身份验证码:
app.js
app.use(session({
secret: 'whatshouldmysecretkeybe',
cookie: {
maxAge: 86400000
},
resave: false,
unset: 'destroy',
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: db
})
}));
loginController.js
// Authenticated Check
exports.requires_login = function (req, res, next) {
if (req.session && req.session.userId) {
return next();
} else {
return res.redirect('/cms/unauthenticated');
return;
}
}
exports.logout = function (req, res, next) {
if (req.session) {
// delete session object
req.session.destroy(function (err) {
if (err) {
return next(err);
} else {
return res.redirect('/cms/');
}
});
}
}
路线档案
我在路由上放置了login_controller.requires_login中间件,以检查每条需要身份验证的路由的身份验证。我希望这是最好的方法。
/* GET Login authenticate */
router.get('/users/logout', login_controller.requires_login, login_controller.logout);
/* GET User listing page */
router.get('/users', login_controller.requires_login, user_controller.list);
谢谢。
答案 0 :(得分:1)
看起来问题是因为mongoose 5与connect-mongo不完全兼容。
这个github问题解释了更多:
https://github.com/jdesboeufs/connect-mongo/issues/277
要解决此问题,您必须在url属性中使用您的mongo url而不是mongooseConnection。
示例:
app.use(session({
secret: 'whatshouldmysecretkeybe',
resave: false,
unset: 'destroy',
saveUninitialized: false,
store: new MongoStore({
url: YOUR_MONGO_URL
})
}));