Узел.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)