2016-08-24 2 views
0

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

// Check to see if the request includes a session Username 
app.use(function (req, res, next) { 
    sessionmanager = req.session; 
    if(sessionmanager.Username) { 
    console.log('Session Details detected'); 
    next(); 
    } else { 
    console.log('No session details detected, pushing user to login page'); 
    res.redirect('/login'); 
    } 
}); 

// User Landing Page 
app.get('/', function (req, res) { 
    console.log('Request for landing page'); 
    res.send('Welcome Page!'); 
}); 


// User Login Page 
app.get('/login', function (req, res) { 
    console.log('Request for User login page'); 
    res.sendFile(path.join(__dirname, './public', 'login.html')); 
}); 

Когда я посещаю Localhost: 3000 перенаправляет меня на локальный: 3000/логин, но страница не загружается, потому что это выглядит как его перенаправлен слишком много раз. Когда я смотрю на консольный журнал, я могу рассчитывать; 20+ строк сообщения «Сведения о сеансе не обнаружены, нажатие на страницу входа в систему».

Из того, что я могу догадаться, перенаправление возвращается к функции app.use, не удается передать менеджер сеанса. Утверждение пользователя и застревает в цикле. Каким образом можно перенаправить трафик на страницу/login? Могу ли я добавить предложение exclude в app.use?

ответ

1

От чтения документов по адресу: https://expressjs.com/en/guide/using-middleware.html Вы можете установить запросы, чтобы/login приходил до использования app.use таким образом, чтобы он не являлся частью цикла перенаправления. Пример:

// User Login Page 
app.get('/login', function (req, res) { 
    console.log('Request for User login page'); 
    res.sendFile(path.join(__dirname, './public', 'login.html')); 
}); 

// Check to see if the request includes a session Username 
app.use(function (req, res, next) { 
    sessionmanager = req.session; 
    if(sessionmanager.Username) { 
    console.log('Session Details detected'); 
    next(); 
    } else { 
    console.log('No session details detected, pushing user to login page'); 
    res.redirect('/login'); 
    //res.sendFile(path.join(__dirname, './public', 'login.html')); 
    } 
}); 

// User Landing Page 
app.get('/', function (req, res) { 
    console.log('Request for landing page'); 
    res.send('Welcome Page!'); 
}); 

Теперь вы можете делать запросы к URL входа/и любые страницы мимо app.use будет толкать вас обратно на страницу входа в систему, если вы не получили сеанс авторизованы

0

Вы. введите свой логин ниже промежуточного программного обеспечения. Оно должно быть наверху список маршрута вашего что-то вроде этого

// User Login Page 
app.get('/login', function (req, res) { 
    console.log('Request for User login page'); 
    res.sendFile(path.join(__dirname, './public', 'login.html')); 
}); 

// Check to see if the request includes a session Username 
app.use(function (req, res, next) { 
    sessionmanager = req.session; 
    if(sessionmanager.Username) { 
    console.log('Session Details detected'); 
    next(); 
    } else { 
    console.log('No session details detected, pushing user to login page'); 
    res.redirect('/login'); 
    } 
}); 

// User Landing Page 
app.get('/', function (req, res) { 
    console.log('Request for landing page'); 
    res.send('Welcome Page!'); 
}); 
  • Middleware будет выполняться для всех маршрутов ниже вы упомянули.
  • В своем коде вы перенаправлении/входа в систему, если сессия не установлена ​​
  • будет снова проверить промежуточное программное обеспечение, прежде чем результаты/входа в петлю перенаправлять

Надеюсь, вы понимаете

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