2013-03-14 4 views
4

Я рассматриваю возможность использования библиотеки паспортов (http://passportjs.org/) для аутентификации в проекте узла.Паспорт для аутентификации в узле JS

Я смущен следующие функции паспорта сессии:

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    user.get(id, function (err, user) { 
     done(err, user); 
    }); 
}); 

Я задаюсь:

1) Есть ли у них дозвонились для каждого запроса, который должен пройти проверку подлинности? Или они просто вызываются один раз, когда сеанс сначала создается?

2) Как получить доступ к информации, находящейся в «пользователе» из других частей моего сценария?

3) Для запросов, которые необходимо пройти проверку подлинности, где я могу добавить дополнительную логику. например, чтобы проверить, не достигнуто допустимое допустимое значение idletime пользователя.

спасибо (заранее) за помощь

ответ

3

1) serializeUser вызывается при создании сеанса для пользователя (если аутентификация прошла успешно). Это используется для хранения какой-либо идентифицирующей информации (например, уникальный идентификатор пользователя) о пользователе в сеансе Express.

deserializeUser вызывается для каждого запроса, и принимает ту часть идентифицирующей информации от сеанса каким-то образом преобразовать его обратно в полную запись пользователя с помощью запроса к базе данных, может быть, но это действительно до вас: вместо просто сохранить идентификатор пользователя, вы также можете сохранить всю запись пользователя в сеансе, но это зависит от типа записи пользователя и используемого вами хранилища сеансов, например, с использованием express.cookieSession будет ограничивать объем данных вы можете сохранить в сеансе).

Это то, что хранить все записи пользователя может выглядеть следующим образом:

passport.serializeUser(function(user, done) { 
    // Here, 'user' is the result of the function called by 'new LocalStrategy()'; when 
    // you call done() below, that result will be stored in the session. 
    done(null, user); 
}); 

passport.deserializeUser(function(user, done) { 
    // Here, 'user' is what's stored in the session by serializeUser() 
    done(null, user); 
}); 

2) Паспорт населяет req.user, которые вы можете использовать в маршрутах или ППО.

3) Вы можете создать промежуточное программное обеспечение для реализации таких проверок. This может быть хорошей отправной точкой.

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