2016-07-12 3 views
3

Это мое первое экспресс-приложение. Я пытаюсь реализовать аутентификацию для некоторых маршрутов. В идеале, если пользователи не аутентифицированы, они будут перенаправлены на главную страницу. Поэтому я написал это промежуточное программное обеспечение:Как перенаправить пользователя, не прошедшего проверку подлинности, используя express-jwt

var jwt = require('express-jwt'); 

app.get('/protected', 
    jwt({secret: 'shhhhhhared-secret'}),  //express-jwt middleware 
    function(req, res, next) {    //redirection middleware 
    if(!req.user._id){ 
     console.log('authentication failed') 
     res.redirect('/home') 
    }else{ 
     next() 
    }; 
    }); 

Если пользователь вошел в систему, код работает. Однако, если пользователь не вошел в систему, браузер просто показывает несанкционированную ошибку 401. Перенаправления нет. Процесс завершился неудачей в промежуточном программном обеспечении express-jwt и не продолжал мое промежуточное ПО перенаправления.

Есть ли какая-то конфигурация, которую мне нужно установить в функции jwt? Или есть способ установить глобальное перенаправление, если встречается 401.

ответ

4

Если пользователь не аутентифицирован, то возникает ошибка, и node.js прекращает выполнение кода. После этого вы сможете поймать его в экспресс-обработчике ошибок:

app.use(function(err, req, res, next) { 
    if(401 == err.status) { 
     res.redirect('/home') 
    } 
    }); 
+0

Этот код должен размещаться перед промежуточным программным обеспечением аутентификации или после? – Sydney

+0

Это промежуточное программное обеспечение должно быть последним. Не забывайте обращаться с другими ошибками, если иначе. Вы можете отправить sms или электронную почту с описанием ошибки или просто сохранить их в базе данных. –