2011-05-23 54 views
13

Tengo un área/'tablero' restringido en mi aplicación Express. Yo uso una función muy pequeño para limitar el acceso:Node.js y manejo de sesión Express - Problema del botón Atrás

app.get('/dashboard', loadUser, function(req, res){ 
    res.render('dashboard', { 
    username: req.session.username 
    }); 
}); 

function loadUser(req, res, next){ 
    if (req.session.auth) { 
    next(); 
    } else { 
    res.redirect('/login'); 
    } 
}; 

El problema es que cuando un usuario cierre de sesión llamando ...

app.get('/logout', function(req, res){ 
    if (req.session) { 
    req.session.auth = null; 
    res.clearCookie('auth'); 
    req.session.destroy(function() {}); 
    } 
    res.redirect('/login'); 
}); 

... la sesión se mató, pero cuando me presionar el botón Atrás en mi navegador obtuve la página restringida de la memoria caché del navegador. Esto significa que no GET en '/ dashboard' y ninguna validación de inicio de sesión de usuario.

Intenté usar no-cache en meta (Jade Template) pero todavía no funciona.

meta(http-equiv='Cache-Control', content='no-store, no-cache, must-revalidate') 
meta(http-equiv='Pragma', content='no-cache') 
meta(http-equiv='Expires', content='-1') 

Anyone?

Respuesta

44

de Josh lamentablemente no funcionó para mí. Pero después de buscar yo encontramos este pregunta: What's the best way to deal with cache and the browser back button?

y aprobó la respuesta no a esta Node.JS/problema urgente. Sólo hay que cambiar la siguiente línea

res.header('Cache-Control', 'no-cache'); 

a

res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'); 

Ahora, cada vez que utilice el botón atrás del navegador, la página se vuelve a cargar y no se almacena en caché.

* actualización para v4.x expresa *

// caching disabled for every route 
server.use(function(req, res, next) { 
    res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'); 
    next(); 
}); 

// otherwise put the res.set() call into the route-handler you want 
+1

estoy teniendo un problema similar. ¿Dónde exactamente agregas esa línea de código? – Scott

+2

Pruebe esto: app.use (function (req, res, next) { res.header ('Cache-Control', 'no-cache, private, sin-store, must-revalidate, max-stale = 0, post -check = 0, pre-check = 0 '); next(); }); – sidonaldson

+0

Desafortunadamente no funciona para mí – nikjohn

4
app.get('/dashboard', loadUser, function(req, res){ 
    res.header('Cache-Control', 'no-cache'); 
    res.header('Expires', 'Fri, 31 Dec 1998 12:00:00 GMT'); 

    res.render('dashboard', { 
    username: req.session.username 
    }); 
}); 
Cuestiones relacionadas