首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >req.session.destroy不起作用

req.session.destroy不起作用
EN

Stack Overflow用户
提问于 2020-06-29 18:32:06
回答 2查看 1.4K关注 0票数 1

我有一个运行在localhost:3001上的NextJS客户机和一个运行在localhost:3000上的Express/MongoDB服务器。

对于身份验证,我使用带有connect-mongoexpress-session,如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
fetch('http://localhost:3000/logout', {
    method: 'post',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    mode: 'cors',
    credentials: 'include'
})

并且服务器似乎确实接收到了正确的req对象,其中包括:

代码语言:javascript
复制
{
    ...
    sessionID: '<encrypted-session-ID>',
    session: Session {
      cookie: {
        path: '/',
        _expires: null,
        originalMaxAge: null,
        httpOnly: false
      }
    }
    ...
}

当我登录req.session.destroy时,控制台还会打印[Function: destroy]。但是当我调用它的时候什么也不会发生。数据库保持不变-登录时的会话记录仍在那里。

代码语言:javascript
复制
router.all('/logout', async function(req, res){
    if (req.session) {
        req.session.destroy();
        return res.end();
    }
}

有人知道我哪里做错了吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-29 18:42:56

可以使用delete req.session.user;

票数 1
EN

Stack Overflow用户

发布于 2020-06-29 19:00:46

代码语言:javascript
复制
req.session.destroy(req.sessionID)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62636212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档