Итак, где хранится сериализованный пользовательский объект?
в коротких
Сериализованный объект пользователя хранится в 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 question).
Express
несет ответственность за создание сеанса. Когда создаются сеансы? То есть, когда Express
не обнаруживает cookie сеанса. Таким образом, порядок, в котором вы упорядочиваете свои и passport
конфигурациях в файле app
или server.js
, очень важен. Если вы объявите свои и passport
конфигурациями выше static directory configs
, тогда все запросы для static content
также получат сеанс, что не очень хорошо.
Смотрите мой ответ на этот SO question, где я говорил о статическом доступе к контенту, а также как выборочно применять 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
});
Существует один удивительный tutorial, что я настоятельно рекомендую вам прочитать, если вы хотите, чтобы понять рабочий процесс PassportJS.