我有一个运行在localhost:3001上的NextJS客户机和一个运行在localhost:3000上的Express/MongoDB服务器。
对于身份验证,我使用带有connect-mongo的express-session,如下所示:
app.use(session({
secret: 'jordan-peterson-is-a-fraud',
resave: false,
saveUninitialized: false,
unset: 'destroy',
cookie: {
httpOnly: false
},
store: new MongoStore({ mongooseConnection: mongoose.connection })
}));在登录时,我设置了req.session.user = userID,这似乎工作得很好:它在我的数据库的sessions表中注册一个新的会话记录,并向客户机发送一个值为connect.sid=<encrypted-session-ID>的set -Cookie头,该头被存储在一个会话cookie中。
到现在为止还好。
但是在注销时,调用req.session.destroy()似乎没有任何效果。客户端将带有凭据的POST发送到服务器上的/logout:
fetch('http://localhost:3000/logout', {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
mode: 'cors',
credentials: 'include'
})并且服务器似乎确实接收到了正确的req对象,其中包括:
{
...
sessionID: '<encrypted-session-ID>',
session: Session {
cookie: {
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: false
}
}
...
}当我登录req.session.destroy时,控制台还会打印[Function: destroy]。但是当我调用它的时候什么也不会发生。数据库保持不变-登录时的会话记录仍在那里。
router.all('/logout', async function(req, res){
if (req.session) {
req.session.destroy();
return res.end();
}
}有人知道我哪里做错了吗?
发布于 2020-06-29 18:42:56
可以使用delete req.session.user;
发布于 2020-06-29 19:00:46
req.session.destroy(req.sessionID)https://stackoverflow.com/questions/62636212
复制相似问题