¿Cuándo se llama el método de pasaporte serializar y deserializar? ¿Qué es exactamente lo que establece?

Tenemos dos tipos de Usuarios, Administradores y Usuarios generales.

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); }); } }); }); 

Console.log se envía con frecuencia (incluso en una sola solicitud de API) con el texto

Deser

¿Qué hacen exactamente las dos funciones? Se agradece una respuesta detallada. TIA.

Serialización y deserialización son conceptos importantes. Serializar un objeto significa convertir su estado en un flujo de bytes de modo que el flujo de bytes se pueda revertir en una copia del objeto.

En una aplicación web típica, las credenciales utilizadas para autenticar a un usuario solo se transmitirán durante la solicitud de inicio de sesión. Si la autenticación se realiza correctamente, se establecerá y mantendrá una sesión a través de un conjunto de cookies en el navegador del usuario.

Cada solicitud posterior no contendrá credenciales, sino la cookie única que identifica la sesión. Para admitir las sesiones de inicio de sesión, Passport serializará y deserializará las instancias de los usuarios hacia y desde la sesión.

En el código que ha escrito, solo el ID de usuario se serializa a la sesión. Cuando se reciben solicitudes posteriores, esta identificación se utiliza para encontrar al usuario, que se restaurará en req.user .

Para que los desarrolladores tengan la libertad de utilizar la base de datos que deseen, independientemente de los datos que deseen serializar, pueden hacerlo a su manera, la lógica de serialización y deserialización nos queda por implementar.

serializeUser es el método al que se llama en la solicitud de inicio de sesión (durante la autenticación) y si el inicio de sesión es exitoso, entonces decide qué información del usuario debe almacenarse en la sesión y se envía una cookie al navegador para que mantenga la sesión.

 // 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); }); 

El fragmento de código anterior guardará el campo user.id en la sesión y la cookie.

deserializeUser es el método al que se llama en todas las solicitudes posteriores y el middleware passport.session llama. Nos permite cargar información adicional del usuario en cada solicitud. Este objeto de usuario se adjunta a la solicitud como requerimiento. El usuario lo hace accesible en nuestro manejo de solicitudes.

Aquí está el artículo que explica que fluya muy bien.