gpt4 book ai didi

node.js - 快速 session 条目未从 mongodb 中完全删除

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:52 24 4
gpt4 key购买 nike

我正在使用express-session以及connect-mongodb-session nodeJS 应用程序中的软件包,用于将 session 存储在 mongodb 数据库中。

问题

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

问题

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

代码

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' <--------
}));

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

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

关于node.js - 快速 session 条目未从 mongodb 中完全删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com