Ответ 1
- Где пользователь user.id отправляется после получения паспорта .serializeUser?
Идентификатор пользователя (вы предоставляете в качестве второго аргумента функции done
) сохраняется в сеансе и позже используется для извлечения всего объекта с помощью функции deserializeUser
.
serializeUser
определяет, какие данные пользовательского объекта должны храниться в сеансе. Результат метода serializeUser присоединяется к сеансу как req.session.passport.user = {}
. Например, это будет (поскольку мы предоставляем идентификатор пользователя в качестве ключа) req.session.passport.user = {id:'xyz'}
- Мы вызываем pass.deserializeUser сразу после него, где он подходит для рабочего процесса?
Первый аргумент deserializeUser
соответствует ключу пользовательского объекта, который был передан функции done
(см. 1.). Таким образом, весь ваш объект извлекается с помощью этого ключа. Этот ключ здесь - идентификатор пользователя (ключ может быть любым ключом пользовательского объекта, то есть имени, электронной почты и т.д.).
В deserializeUser
этот ключ сопоставляется с массивом/базой данных в памяти или с любым ресурсом данных.
Приобретенный объект прикрепляется к объекту запроса как req.user
Visual Flow
passport.serializeUser(function(user, done) {
done(null, user.id);
|
}); |
|
|____________________> saved to session req.session.passport.user = {id:'..'}
|
\|/
passport.deserializeUser(function(id, done) {
________________|
|
\|/
User.findById(id, function(err, user) {
done(err, user);
|______________>user object attaches to the request as req.user
});
});