使用Express和MongoDB注销后仍然保持登录状态

时间:2018-02-15 13:08:19

标签: node.js mongodb express

我在退出应用程序时遇到问题。

我正在使用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);

谢谢。

1 个答案:

答案 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
  })
}));