Понимание паспорта сериализация десериализация


как бы вы объяснили рабочий процесс сериализации и десериализации методов Passport для непрофессионала.

  1. где user.id перейдите после passport.serializeUser называют?

  2. мы называем 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 223

2 ответа:

  1. где это 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