req.session.destroy y el cierre de sesión del pasaporte no están destruyendo la cookie en el lado del cliente

Estoy tratando de destruir la cookie en el lado del cliente, pero parece que no puedo encontrar la forma de hacerlo. He probado las pocas formas en que el pasaporte y algunas respuestas en SO proporcionaron, pero no sé cómo borrar la cookie real.

Mi código hasta ahora es:

app.get('/logout', function (req, res){ sessionStore.destroy(req.sessionID, (err) =>{ if(err)console.log(err); req.logout(); req.session.destroy(function (err) { if(err) console.log(err); res.status(200).json({message : 'User Logged Out'}); }); }); }); 

También he probado el req.logOut(); método.

req.logout no borra la sesión, sino que borra la información de inicio de sesión de la sesión. Un ejemplo de mi tienda de sesión después de iniciar sesión:

 > db.sessions.find().pretty(); { "_id" : "LkuoFL_cwkvNO3foD_k0zQYADevcdwW6", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"test\"}}", "expires" : ISODate("2018-06-05T17:31:54.631Z") } 

Aquí puede ver que passport.user en la session JSON tiene el valor que devolví de serializeUser (el nombre de usuario). Después de llamar a req.logout el almacén de la sesión aún mantiene la sesión, pero falta la información del usuario serializada, es decir. Ya no estoy conectado:

 > db.sessions.find().pretty(); { "_id" : "LkuoFL_cwkvNO3foD_k0zQYADevcdwW6", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}", "expires" : ISODate("2018-06-05T17:32:02.391Z") } 

Si cambio mi controlador de ruta de cierre de sesión a esto:

 app.post('/logout', (req, res) => { req.logout(); req.session.destroy((err) => res.redirect('/')); }); 

Puedo ver que después de cerrar la sesión, la sesión anterior ha desaparecido, pero se creó una nueva porque llegué a la primera página y comienza una nueva sesión:

 > db.sessions.find().pretty(); { "_id" : "KIX2rypzvpRdqW7VlzO8B8W-FMXwffGT", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}", "expires" : ISODate("2018-06-05T17:38:01.136Z") } 

Además, la cookie connect.sid en el navegador ahora contiene la nueva clave de sesión.

Ahora agregue el clearCookie . Con el manejador de cierre de sesión como este:

 app.post('/logout', (req, res) => { req.logout(); req.session.destroy((err) => { res.clearCookie('connect.sid'); // Don't redirect, just print text res.send('Logged out'); }); }); 

el almacén de la sesión está vacío después de hacer clic en el botón de cierre de sesión (observe que no se realizan más solicitudes en el ejemplo):

 > db.sessions.find().pretty(); > 

y los encabezados de respuesta de la solicitud de cierre de sesión muestran una cookie borrada:

Set-Cookie: connect.sid=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT

Ahora, si no se realizan más solicitudes al servidor (las nuevas pueden iniciar una nueva sesión aunque no haya iniciado sesión), ya no debería ver la cookie connect.sid en las herramientas de desarrollo de búsqueda.