2013-09-11 3 views
79

Я читал passport.js информацию и образцы в течение двух дней, но я не уверен, что после этого я выполнил весь процесс аутентификации.Как узнать, вошел ли пользователь в систему с паспортом?

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

if (login) 
    <button>logout</button> 
else 
    <button>login</button> 

ответ

158

Если пользователь вошел в системе, passport.js создаст user объекта в req для каждого запроса в express.js, которые вы можете проверить на наличие в любом промежуточном слое:

if (req.user) { 
    // logged in 
} else { 
    // not logged in 
} 

Вы можете создать простые express.js промежуточное программное обеспечение для что он будет проверять, зарегистрирован ли пользователь, а если нет - будет перенаправлен на страницу /login:

function loggedIn(req, res, next) { 
    if (req.user) { 
     next(); 
    } else { 
     res.redirect('/login'); 
    } 
} 

И использовать его:

app.get('/orders', loggedIn, function(req, res, next) { 
    // req.user - will exist 
    // load user orders and render them 
}); 
+0

Это глобальный? Могу ли я получить к нему доступ во всем проекте после входа в систему? – RMontes13

+0

Если вы включите промежуточное программное обеспечение passport.js в настройку express.js, это повлияет на каждый запрос (на всех маршрутах). – moka

+3

его не глобальное его только на объект запроса. – supernova

36

Если вы хотели бы использовать его в шаблонах, как ваш пример кода, кажется, указывает, вы можете создать некоторые промежуточное программное обеспечение, например, как это:

app.use(function (req, res, next) { 
    res.locals.login = req.isAuthenticated(); 
    next(); 
}); 

Место что код где-то после установки паспорта.

И затем использовать его в шаблоне (например, SWIG)

{% if login %} 
<button>logout</button> 
{% else %} 
<button>login</button> 
{% endif %} 
+0

По какой-то причине вышеуказанное промежуточное ПО давало мне проблему с тем, что пользователь не определился в моем шаблоне , Мне пришлось повторно поставить объект пользователя в представление, чтобы исправить его так: 'app.use (function (req, res, next) {' 'res.locals.login = req.isAuthenticated();' 'res.locals.user = req.user;' 'next();' '});' – Tebbers

+0

Даже после успешной аутентификации 'isAuthenticated' дает false в следующем запросе. Не могли бы вы ответить на этот вопрос http://stackoverflow.com/questions/42842171/detect-if-the-user-was-authenticated-before –

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