Запретить рендеринг 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 не требуется, может быть подделан и, следовательно, не должен рассматриваться как абсолютная истина.

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

Другие вопросы по тегам