2016-09-08 3 views
1

В моем приложении Node.js (я использую express 4.x) Я хочу проверить, зарегистрирован ли пользователь. Если пользователь не зарегистрирован, я хочу перенаправить на мою страницу входа. Тогда я, что в ПО промежуточного слоя, как это:Узел js слишком много перенаправления с использованием перенаправления промежуточного слоя

Server.js

app.use(function (req, res, next) { 

    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated()) 
     return next(); 

    // if they aren't redirect them to the home page 
    res.redirect('/login'); 
}); 

Войти маршрут

// Login page 
app.get('/login', function(req, res){ 
    res.render('pages/login', { 
       error : req.flash('loginError'), 
       info : req.flash('info'), 
       success : req.flash('success') 
      }); 
}); 

Но когда я добавить этот код в моем промежуточного слоя, страница Логин называется более 30 раз ... И мой браузер говорит Too many redirect.

Вы знаете, почему моя страница входа в систему называется много?

+1

ли req.isAuthenticated() также призвал к «/ входа»? Потому что это бесконечный цикл. –

+0

Я отредактировал мой вопрос. req.authenticated также не вызван для/login. Но я попытался удалить 'if (req.isAuthenticated()) return next();' для проверки. Я просто позволю 'res.redirect ('/ login');' и у меня такая же ошибка. – John

+2

Проверьте промежуточное ПО, если текущий путь - 'login', не перенаправляйте так. И для лучшего случая, вызовите 'next' после перенаправления –

ответ

2

Вы ловите в бесконечном цикле, потому что, если запрошенный путь login даже так перенаправлять login снова

app.use(function (req, res, next) { 

    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated()) 
     return next(); 

    // if they aren't redirect them to the home page 
    if(req.route.path !== '/login') 
     res.redirect('/login'); 
    next(); 
}); 
Смежные вопросы