Проверка каждого запроса node.js на учетные данные аутентификации

Я использую node.js с Express и connect-auth для аутентификации пользователей.

Это проверка при запросе /index:

if(req.isAuthenticated()) {
  res.redirect('/dashboard');
} else {
  res.render('index', { layout: 'nonav' });
}

Однако после выхода из системы и возврата к, например, '/dashboard', я могу увидеть приборную панель.

Как я могу поставить проверку подлинности на каждый запрос, чтобы быть уверенным, что там всегда есть действительный пользователь?

Обновление. У меня нет никаких проблем с аутентификацией, все работает отлично! Мне нужно решение, которое проверяет каждый маршрут/запрос, есть ли действительный пользователь, не помещая функцию или if-выражение в реализацию маршрута, так как все приложение в любом случае нуждается в действительном пользователе. Пример Express-Authentication-Example использует "restrict" в определении маршрута, что близко, но при большом количестве маршрутов это может быть легко забыто.

26
задан Patrick 31 October 2011 в 14:54
поделиться

1 ответ

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');
});
35
ответ дан 28 November 2019 в 07:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: