Когда вызывается метод serialize и deserialize passport? Что именно он устанавливает?

у нас есть два типа пользователей, администраторов и обычных пользователей.

passport.serializeUser(function(user, done) {
  console.log('Sear');
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  console.log(id);
  console.log("Deser");
  User.findById(id, function(err, user) {
    if(err) done(err);
    if(user){
      done(null, user);  
    }else{
       vendorUser.findById(id, function(err, user){
        if(err) done(err);
        done(null,user);
       });
    }
  });
});

2 ответов


сериализация и десериализация важное понятие. сериализовать объект означает преобразовать его состояние в поток байтов таким образом, чтобы поток байтов можно было вернуть обратно в копию объекта.

в типичном веб-приложении учетные данные, используемые для аутентификации пользователя, будут передаваться только во время запроса на вход. Если аутентификация пройдет успешно, сеанс будет установлен и поддерживаться с помощью cookie, установленного в файле пользователя браузер.

каждый последующий запрос будет содержать не учетные данные, а уникальный файл cookie, идентифицирующий сеанс. для поддержки сеансов входа в систему Passport сериализует и десериализует пользовательские экземпляры в и из сеанса.

в написанном коде сериализуется только идентификатор пользователя для сеанса. При получении последующих запросов этот идентификатор используется для поиска пользователя, который будет восстановлен req.user.

чтобы предоставить разработчикам свободу пользователю, какую бы базу данных они ни хотели, какие бы данные они ни хотели сериализовать, они могут сделать это по-своему, логика сериализации и десериализации остается нам для реализации.


serializeUser - Это метод, который вызывается по запросу входа в систему (во время аутентификации), и если вход в систему успешен, то он решает, какая информация о пользователе должна храниться в сеансе, и cookie отправляется в браузер для того же, чтобы поддерживать сеанс.

// Only during the authentication to specify what user information should be stored in the session.
passport.serializeUser(function (user, done) {
    console.log("Serializer : ", user)
    done(null, user.id);
});

приведенный выше фрагмент сохранит пользователя.поле id для сеанса и cookie.

deserializeUser - это метод, который вызывается во всех последующих запросах и вызывается passport.session промежуточное. Он позволяет загружать дополнительную информацию о пользователе по каждому запросу. Этот объект пользователя прилагается к запросу при.пользователь делает его доступным в нашей обработке запросов.

здесь статья, которая объясняет это очень хорошо поток