Понимание паспорта сериализация десериализация
как бы вы объяснили рабочий процесс сериализации и десериализации методов 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); }); });
Я все еще пытаюсь обернуть мою голову вокруг него. У меня есть полное рабочее приложение и я не сталкиваюсь с ошибками любого рода.
I просто хотел понять, что именно здесь происходит?
любая помощь приветствуется.
2 ответа:
- где это user.id идите за паспортом.serializeUser был вызван?
идентификатор пользователя (вы предоставляете в качестве второго аргумента
done
функция) сохраняется в сеансе и позже используется для извлечения всего объекта через
для тех, кто использует Koa и КоА-паспорт:
знайте, что ключ для пользователя, заданный в методе serializeUser (часто уникальный идентификатор для этого пользователя), будет храниться в:
this.session.passport.user
когда вы установите в
done(null, user)
в deserializeUser, где "пользователь" - это некоторый объект пользователя из вашей базы данных:
this.req.user
ИЛИthis.passport.user
почему-то
this.user
контекст Koa никогда не устанавливается при вызове done (null, user) в вашем метод deserializeUser.таким образом, вы можете написать свой собственный middleware после вызова приложения.ЕГЭ(паспорт.session ()), чтобы поместить его в это.пользователю нравится так:
app.use(function * setUserInContext (next) { this.user = this.req.user yield next })
Если вам непонятно, как работают serializeUser и deserializeUser, просто нажмите мне на twitter. @yvanscher