当破坏生产被调用Express会话数据不从蒙戈存储中删除

问题描述 投票:0回答:1

我面临着我的应用程序的退出功能的问题。

问题

调用req.session.destroy不仅删除从生产会话的MongoDB收集会话数据。

该请求到达服务器,注销方法运行,从破坏函数返回没有错误,在会话中运行的console.log表明它是空的,但页面刷新用户仍然登录,并检查db.sessions.find()显示了会话数据不变。

我相信子站点设置有事情做与此,当地按预期工作。我只是想不通这是因为应用程序的功能,否则罚款。

使用密钥包

  • 快递会话
  • 连接 - 蒙戈
  • 心中

该功能能正常工作本地(API和应对程序都在本地主机上运行,​​只是不同的端口)。

生产设置,使

  • api.mydomain.com是快递API和蒙戈DB节点服务器。
  • app.mydomain.com是一个作出反应的应用程序,将请求发送到API。

server.js - 重要组成部分

    //use sessions for tracking logins
var sessionData = {
    name: 'secure_name', // for testing
    secret: 'secure_secret', // for testing
    resave: true,
    rolling: true,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection }),
    cookie: {
        "maxAge": (1000 * 60 * 60 * 7), // 7 days.
        secure: false,
        path: '/',
        domain: process.env.DOMAIN
    }
};

// Setup session with config and make the app use it.
var sessionMiddleware = session(sessionData);
app.use(sessionMiddleware);

...
// User - Logout.
app.get('/api/users/logout', user.logout);

user.logout方法

// Logout user.
exports.logout = (req, res, next) => {

    // Only if there is an active session.
    if (req.session) {

        // delete session object
        req.session.destroy(error => {

            req.session = null;
            if (error) return next(error);

            res.send({ logout: true })
        });
    }
}

反应注销方法请求

        // Logout - end this user session.
    @action logout() {

        // Destroy session.
        return axios.get(config.url + 'api/users/logout', {
                headers: {
                    'Access-Control-Allow-Origin': '*',
                    'Content-Type': 'application/json',
                },
            })

任何帮助将非常感激。

javascript node.js mongodb express express-session
1个回答
1
投票

我已经找到了解决我的问题。在一个类似的问题在这里发帖万一别人绊倒。

发送到服务器的GET请求不包括任何凭据,因为默认情况下此设置为false。

解决的办法是明确设置“与-凭证”为true在请求中,如下图所示:

        // Logout - end this user session.
@action logout() {

    // Destroy session.
    return axios.get(config.url + 'api/users/logout', {
            headers: {
                'Access-Control-Allow-Origin': '*',
                'Content-Type': 'application/json',
            },
            withCredentials: true
        })
© www.soinside.com 2019 - 2024. All rights reserved.