Как бы вы объяснили непрофессионалу рабочий процесс методов сериализации и десериализации Passport?
Куда
user.id
идти после того,passport.serializeUser
как был вызван?Мы звоним
passport.deserializeUser
сразу после него, где он вписывается в рабочий процесс?// used to serialize the user for the session passport.serializeUser(function(user, done) { done(null, user.id); // where is this user.id going? Are we supposed to access this anywhere? }); // used to deserialize the user passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });
Я все еще пытаюсь обернуть голову вокруг этого. У меня полнофункциональное приложение, и я не сталкиваюсь ни с какими ошибками.
Я просто хотел понять, что именно здесь происходит?
Любая помощь приветствуется.
user.id
сохраняетсяreq.session.passport.user
илиuser
хранится какreq.session.passport.user
req.session.passport.user = {id: '..'}
часть диаграммы немного смещена, иreq.session.passport.user = 785352
вместо нее должна быть там , где785352
естьuser.id
. У меня проблемы с консольной регистрацией, чтобы доказать это, но кажется, что это имеет смысл. Когда вы звонитеdone(null, user.id);
, имеет смысл взять второй аргумент -user.id
в данном случае - и назначить егоreq.session.passport.user
вместо того, чтобы назначать егоreq.session.passport.user.id
. Потому что, если вы вместо этого перейдетеuser
?req.sesssion.passport.user.id = user
не имеет смысла.Для тех, кто использует коа и паспорт коа :
Знайте, что ключ для пользователя, установленный в методе serializeUser (часто это уникальный идентификатор для этого пользователя), будет храниться в:
this.session.passport.user
Когда вы устанавливаете в
done(null, user)
deserializeUser, где 'user' - это какой-то пользовательский объект из вашей базы данных:this.req.user
ИЛИthis.passport.user
по какой-то причине
this.user
контекст Koa никогда не устанавливается при вызове done (null, user) в вашем методе deserializeUser.Таким образом, вы можете написать свое промежуточное программное обеспечение после вызова app.use (passport.session ()), чтобы поместить его в this.user следующим образом:
Если вы не знаете, как работает serializeUser и deserializeUser, просто напишите мне в твиттере. @yvanscher
источник