2016-05-06 2 views
0

Im в настоящее время с помощью узла & Экспресс для создания моего приложения,Предотвратить HTML рендеринга из запроса GET не-браузер

Моя функция аутентификации выглядит следующим образом:

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-Монго и предотвратить все страницы, которые пользователи с проверкой подлинности на от визуализируемого? Есть ли определенный заголовок, который я должен искать?

Заранее спасибо.

ответ

1

Вы можете посмотреть заголовок пользовательского агента и посмотреть, является ли он браузером или нет. Вы можете использовать что-то вроде express-useragent, чтобы помочь вам.

Заголовок User-Agent не требуется, может быть подделан и, следовательно, не должен считаться абсолютной истиной.

Я не думаю, что ваш маршрут должен вести себя по-разному в зависимости от того, что он считает клиентом или нет. У вас должен быть маршрут для рендеринга страницы и другой маршрут для необработанных данных.

Смежные вопросы