Так где же хранится сериализованный пользовательский объект?
Короче
Сериализованный пользовательский объект хранится в req.user
по PassportJS
, взятом из req.session.passport.user
(который заполняется Express
) с помощью метода Passport's
deserializeUser
.
Express
добавляет идентификатор объекта сеанса в файл cookie в браузере пользователя, который отправляется обратно для выражения в заголовке при каждом запросе. Express
затем берет идентификатор из заголовка и выполняет поиск в хранилище сеансов (например, Mongo или что-то еще), находит запись и загружает ее в req.session
.
PassportJS
использует содержимое req.session
для отслеживания аутентифицированного пользователя с помощью методов serializeUser
и deserializeUser
(для получения дополнительной информации о рабочем процессе serializeUser
и deserializeUser
см. Мой ответ в этом SO вопрос).
Express
отвечает за создание сеанса. когда создаются сеансы? Это когда Express
не обнаруживает cookie сеанса. Поэтому порядок, в котором вы упорядочиваете свои session
и passport
конфиги в app
или server.js
файле, очень важен. Если вы объявите свои session
и passport
конфигурации выше static directory configs
, тогда все запросы для static content
также получат сеанс, что не очень хорошо.
См. Мой ответ на этот вопрос, где я упоминал о доступе к статическому контенту, а также о том, как выборочно применять passport
к определенным маршрутам, а не по умолчанию (вам может не потребоваться аутентификация всех маршрутов - следовательно, вы можете избежать ненужных session store lookup
и de-serialization
, подключив сеанс только к запросам, которые сопоставляют для защиты URL-адресов см. ниже).
//selectively applying passport to only secure urls
app.use(function(req, res, next){
if(req.url.match('/xxxx/secure'))
passport.session()(req, res, next)
else
next(); // do not invoke passport
});
Есть одно замечательное руководство, которое я настоятельно рекомендую. прочтите, если хотите понять рабочий процесс PassportJS.
person
Raf
schedule
12.02.2016