Я использую node.js с Express и connect-auth для аутентификации пользователей.
Это проверка при запросе /index:
if(req.isAuthenticated()) {
res.redirect('/dashboard');
} else {
res.render('index', { layout: 'nonav' });
}
Однако после выхода из системы и возврата к, например, '/dashboard', я могу увидеть приборную панель.
Как я могу поставить проверку подлинности на каждый запрос, чтобы быть уверенным, что там всегда есть действительный пользователь?
Обновление. У меня нет никаких проблем с аутентификацией, все работает отлично! Мне нужно решение, которое проверяет каждый маршрут/запрос, есть ли действительный пользователь, не помещая функцию или if-выражение в реализацию маршрута, так как все приложение в любом случае нуждается в действительном пользователе. Пример Express-Authentication-Example использует "restrict" в определении маршрута, что близко, но при большом количестве маршрутов это может быть легко забыто.
app.all('*',function(req,res,next){
if(req.isAuthenticated()){
next();
}else{
next(new Error(401)); // 401 Not Authorized
}
});
// NOTE: depending on your version of express,
// you may need to use app.error here, rather
// than app.use.
app.use(function(err,req,res,next){
// Just basic, should be filled out to next()
// or respond on all possible code paths
if(err instanceof Error){
if(err.message === '401'){
res.render('error401');
}
}
});
Если вы определяете маршрут all
до маршрутов, которые требуют аутентификации, и после маршрутов, которые не (таких как домашняя страница, логин и т. Д.), То это должно влиять только на маршруты, которые в нем нуждаются. В качестве альтернативы вы можете использовать RegExp вместо '*'
, который будет включать подпуть или список путей, требующих аутентификации.
Другим вариантом будет создание функции для включения в каждый маршрут, требующий авторизации:
function IsAuthenticated(req,res,next){
if(req.isAuthenticated()){
next();
}else{
next(new Error(401));
}
}
app.get('/login',function(req,res,next){
res.render('login');
});
app.get('/dashboard',IsAuthenticated,function(req,res,next){
res.render('dashboard');
});
app.get('/settings',IsAuthenticated,function(req,res,next){
res.render('settings');
});