Node.js и обработка экспресс-сессии - проблема с кнопкой "Назад"
У меня есть ограниченная область/панель инструментов в моем приложении Express. Я использую очень маленькую функцию для ограничения доступа:
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');
}
};
Проблема заключается в том, что когда я выхожу из системы с помощью вызова...
app.get('/logout', function(req, res){
if (req.session) {
req.session.auth = null;
res.clearCookie('auth');
req.session.destroy(function() {});
}
res.redirect('/login');
});
... сеанс убит, но , когда я нажимаю кнопку "Назад" в моем браузере, я получил ограниченную страницу из кеша браузера. Это означает, что GET не отображается на "/dashboard" и не проверяется авторизация входа в систему.
Я попытался использовать no-cache в мета (Jade Template), но он все еще не работает.
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')
Кто-нибудь?
Ответы
Ответ 1
Ответ Джоша печально не сработал у меня.
Но после некоторых поисков я нашел это
вопрос: Каков наилучший способ работы с кешем и кнопкой браузера?
и принял ответ на эту проблему node.js/express.
Вам просто нужно изменить следующую строку
res.header('Cache-Control', 'no-cache');
к
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
Теперь, каждый раз, когда я использую кнопку назад, страница перезагружается и не кэшируется.
* обновление для express v4.x *
// 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
Ответ 2
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
});
});
Ответ 3
Не обращайте внимания на мой предыдущий пост, см. этот вопрос: самый простой способ предотвратить отображение кнопки "Назад" вашего браузера с защищенных данных после выхода пользователя из системы?