Узел.js-проблема с res.перенаправление в middleware
Я пытаюсь использовать промежуточное ПО authenticateUser () перед загрузкой всех моих страниц. Вместо того, чтобы включать его в каждый вызов (как в приложении.get ('/ ' , authenticateUser, function ()...)), Я попытался установить его с помощью приложения.использовать(authenticateUser) прямо перед вызовом приложения.использование (app.маршрутизатор.)
Это не работа,. authenticateUser в основном:if (req.session.loginFailed) {
next()
else {
if (req.session.user_id) {
...
if (userAuthenticated) {
next();
} else {
req.session.loginFailed = true;
console.log('setting loginFailed to true');
res.redirect('/login');
}
}
}
а затем в приложении.get ('/login') я установил req.сессия.loginFailed быть ложным;
Это должно работать, но я только хотите позвонить в приложение.get () или app.пост() и т. д. на одной из моих страниц. Я думаю, что его вызывают много раз для многих разных запросов (потому что при загрузке одной страницы "установка loginFailed в true" вызывается много раз)
есть ли лучший способ сделать это? Или я должен просто называть его перед каждой страницей на моем сайте?
1 ответов
Вы делаете слишком много проверок там, на мой взгляд. Только один маршрут должен обрабатывать логин пользователя (проверьте user & pass и сохраните имя пользователя в сеансе, если это удастся), и вы должны назначить промежуточное программное обеспечение auth только на маршрутах, требующих auth (не все).
Я поставил упрощенный пример, чтобы вы могли понять мою точку зрения:
логин маршруту
app.post('/login', function (req, res) {
var variables_set = (req.body.user && req.body.pass);
if (variables_set && (req.body.user === 'username') && (req.body.pass === 'password')) {
req.session.username = req.body.user;
} else {
res.redirect('/login?failed=true');
}
});
auth middleware
if (!req.session.username) {
res.redirect('/login');
} else {
next();
}
вы можете увидеть более полный пример в действии в приложении Nodepad Алекса Янга:https://github.com/alexyoung/nodepad (учебники для этого приложения здесь:http://dailyjs.com/tags.html#lmawa)