Borrar sesiones en mongodb, expressjs, nodejs

Mi configuración:

app.configure(function(){
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({
        secret: 'MY SECRET',
        store: new MongoStore({
            db: 'MY SESSION DB',
            host: 'localhost',
            port:88888
        })
    }));
    app.use(everyauth.middleware());
    app.use(express.methodOverride());

    app.use(app.router);
});

app.configure('dev', function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    appPort = config.port; //Setting PORT to 8888 in dev mode.
    app.use('/public', express.static(__dirname + '/public'));
});

app.configure('production', function(){
    app.use(express.errorHandler());
    appPort = config.port;
    //Set cache-header-expires to 1 day
    var oneDay = 86400000;
    //app.use('/public', express.static(__dirname + '/public'));
    app.use('/public',express.static(__dirname + '/public', { maxAge: oneDay }));
});

Ahora, tengo un enlace de 'cerrar sesión' que va a /cerrar sesión en mi aplicación.

AFAIK, express se encarga automáticamente de borrar las sesiones al cerrar la sesión. Pero con mi configuración, no creo que esté haciendo eso. Por ejemplo, una variable personalizada adjunta a la sesión

req.session.custom

todavía se mantiene después de cerrar la sesión. Sin embargo,

req.session.auth

se borra después de cerrar la sesión.

La cantidad de objetos de sesión en mi tienda MongoDb solo aumenta con el tiempo. estoy usando Everyauth también.

¿Qué me estoy perdiendo o haciendo mal?

preguntado el 30 de junio de 12 a las 13:06

2 Respuestas

Si desea borrar completamente la sesión para el usuario al cerrar la sesión, puede llamar req.session.destroy() a partir de su everyauth.everymodule.handleLogout función. Solamente req.session.auth se borra cuando llamas req.logout().

Respondido el 30 de junio de 12 a las 13:06

¿Cómo puedo eliminar el objeto en mi tienda de sesión de Mongo también al cerrar la sesión? - Rajat

req.session.destroy() elimina el objeto de sesión de su tienda. - johnnyhk

No creo que req.session.destroy() lo esté limpiando. Tanto antes como después de cerrar la sesión, count() en la tienda es 1 cuando pruebo. ¿Cualquier pista? - Rajat

¿Su cierre de sesión redirige a una página de inicio de sesión? Eso crearía una nueva sesión para reemplazar la que acaba de destruir durante el cierre de sesión y haría que pareciera que nada cambió. - johnnyhk

Tienes razón. Está creando uno nuevo. Compruebo la identificación de la sesión. Gracias por señalar eso. - Rajat

¿Por qué está creando una nueva sesión en mongo store? ¿Hay alguna forma de evitarlo cuando me redirigen para iniciar sesión nuevamente? — Solitario 7 jun.

Hay una guardarNo inicializado opción para evitar que la sesión se guarde si no contiene ningún dato.

app.use(session({
    secret: 'secret123',
    store: new MongoStore({
        mongooseConnection: mongoose.connection,
        ttl: 60 * 30 // half hour
    }),
    saveUninitialized: false
}));

respondido 09 mar '21, 08:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.