Запретить рендеринг html из не-браузера GET-запроса
Сейчас я использую Node & Express для создания своего приложения
Моя функция аутентификации выглядит так:
exports.isAuthenticatedLocal = function(req, res, callback) {
// console.log(req.headers);
if (req.isAuthenticated()) {
callback(null, true);
} else {
res.redirect('/login');
}
};
Это называется в моем маршрутизаторе пользователей:
router.get('/profile', authController.isAuthenticatedLocal, function(req, res) {
res.render('profile', { user : req.user });
});
Так что все работает с страницей профиля, отображаемой из браузера. Однако, если пользователь вошел в систему и опубликовал GET
запросить localhost/profile
вся страница будет отправлена обратно со всеми данными пользователя.
Проблема в том, что я использую connect-mongo
для постоянного паспортного соединения.
var MongoStore = require('connect-mongo')(session);
...
var sessionStore = new MongoStore({ mongooseConnection: db.connection });
app.use(session({
key: 'connect.sid',
secret: 'secret',
store: sessionStore,
resave: true,
saveUninitialized: true
}));
Использование простого сеанса не вызовет req.isAuthenticated()
из не-браузера GET
запрос и страница входа, на которую я перенаправляю, отображаются вместо этого (что нормально).
app.use(session({
key: 'connect.sid',
secret: 'secret',
resave: true,
saveUninitialized: true
}));
Итак, как я могу сохранить постоянное соединение с connect-mongo и предотвратить рендеринг всех страниц, на которых аутентифицированы пользователи? Есть ли конкретный заголовок, который я должен искать?
Заранее спасибо.
1 ответ
Вы можете посмотреть на заголовок user-agent и посмотреть, является ли это браузером или нет. Вы можете использовать что-то вроде экспресс-useragent, чтобы помочь вам.
Заголовок User-Agent не требуется, может быть подделан и, следовательно, не должен рассматриваться как абсолютная истина.
Я не думаю, что ваш маршрут должен вести себя по-разному, в зависимости от того, что он думает, клиент или нет. У вас должен быть маршрут для рендеринга страницы и другой маршрут для необработанных данных.