¿Cómo explicarías el flujo de trabajo de los métodos de serialización y deserialización de Passport a un laico?
¿A dónde
user.id
va después depassport.serializeUser
haber sido llamado?Estamos llamando
passport.deserializeUser
justo después de eso, ¿dónde encaja en el flujo de trabajo?// 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); }); });
Todavía estoy tratando de entenderlo. Tengo una aplicación de trabajo completa y no me encuentro con errores de ningún tipo.
Solo quería entender qué está pasando exactamente aquí.
Cualquier ayuda es apreciada.
user.id
guarda comoreq.session.passport.user
o seuser
almacena comoreq.session.passport.user
req.session.passport.user = {id: '..'}
parte del diagrama está ligeramente apagada, y debería estarreq.session.passport.user = 785352
en su lugar, donde785352
estáuser.id
. Tengo problemas para iniciar sesión en la consola para probarlo, pero parece que tendría sentido. Cuando llamedone(null, user.id);
, tendría sentido tomar el segundo argumento,user.id
en este caso, y asignarlo areq.session.passport.user
, en lugar de asignarlo areq.session.passport.user.id
. Porque, ¿qué pasa si en su lugar pasasuser
?req.sesssion.passport.user.id = user
No tendría sentido.Para cualquiera que use Koa y el pasaporte koa :
Sepa que la clave para el usuario establecida en el método serializeUser (a menudo una identificación única para ese usuario) se almacenará en:
this.session.passport.user
Cuando se establece en
done(null, user)
deserializeUser donde 'user' es algún objeto de usuario de su base de datos:this.req.user
Othis.passport.user
por alguna razón, el
this.user
contexto de Koa nunca se establece cuando llamas a done (null, user) en tu método deserializeUser.Para que pueda escribir su propio middleware después de la llamada a app.use (passport.session ()) para ponerlo en this.user así:
Si no tienes claro cómo funcionan serializeUser y deserializeUser, solo contáctame en Twitter. @yvanscher
fuente