未从 mongodb 中完全删除快速会话条目

express-session entry not completely removed from mongodb

我在 nodeJS 应用程序中使用 express-session along with connect-mongodb-session 包来将会话存储在 mongodb 数据库中。

问题

当我尝试使用 req.session.destroy() 函数删除保存在数据库中的会话时,它会从保存在数据库中的会话条目中删除与用户相关的信息,但不会从数据库中完全删除会话条目数据库。

问题

我该如何解决这个问题?为什么会话条目完全从数据库中删除?

代码

const expressSession = require('express-session');
const MongoDbStore = require('connect-mongodb-session')(expressSession);

const sessionStore = new MongoDbStore({
    uri: dbConnectionStr,
    collection: 'sessions'
});

app.use(expressSession({
    secret: 'sessionsecret',
    resave: false,
    saveUninitialized: false,
    store: sessionStore
}));

调用 req.session.destroy 的代码

const logout = (req, res) => {
    try {

         // destroy session saved in db
            req.session.destroy((error) => {
            if (error) {
                throw new Error('something went wrong while logging out')
            }
            res.redirect('/login');
        });

    } catch (error) {
        res.status(400).send(utils.standardResponse('error', error.message));
    }
};

对于可能遇到此问题的任何其他人,这里是解决方案

设置express-session时,将unset选项设置为destroy

app.use(session({
    secret: process.env.EXPRESS_SESSION_SECRET,
    resave: false,
    saveUninitialized: false,
    store: sessionStore,
    unset: 'destroy'                   <-------- 
}));

然后在您的路由处理程序中,每当您想销毁会话存储中的会话条目时,只需将 req.session 设置为 null

const logout = (req, res) => {
    req.session = null;   
    res.redirect('/login');
};