Когда вызывается метод 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
промежуточное. Он позволяет загружать дополнительную информацию о пользователе по каждому запросу. Этот объект пользователя прилагается к запросу при.пользователь делает его доступным в нашей обработке запросов.
здесь статья, которая объясняет это очень хорошо поток