Comment expliqueriez-vous le flux de travail des méthodes de sérialisation et de désérialisation de Passport à un profane.
Où
user.id
aller aprèspassport.serializeUser
avoir été appelé?Nous appelons
passport.deserializeUser
juste après, où cela s'intègre-t-il dans le flux de travail?// 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); }); });
J'essaie toujours d'envelopper ma tête autour de ça. J'ai une application de travail complète et je ne rencontre aucune erreur.
Je voulais juste comprendre ce qui se passe exactement ici?
Toute aide est appréciée.
user.id
enregistré sousreq.session.passport.user
ou estuser
lui - même stocké sous le nomreq.session.passport.user
req.session.passport.user = {id: '..'}
partie du diagramme est légèrement décalée et devraitreq.session.passport.user = 785352
plutôt être où elle785352
estuser.id
. J'ai du mal à me connecter à la console pour le prouver, mais il semble que cela aurait du sens. Lorsque vous appelezdone(null, user.id);
, il serait logique de prendre le deuxième argument -user.id
dans ce cas - et de l'assigner àreq.session.passport.user
, au lieu de l'assigner àreq.session.passport.user.id
. Et si vous passiez à la placeuser
?req.sesssion.passport.user.id = user
n'aurait pas de sens.Pour toute personne utilisant Koa et koa-passeport :
Sachez que la clé de l'utilisateur définie dans la méthode serializeUser (souvent un identifiant unique pour cet utilisateur) sera stockée dans:
this.session.passport.user
Lorsque vous définissez dans
done(null, user)
deserializeUser où «utilisateur» est un objet utilisateur de votre base de données:this.req.user
OUthis.passport.user
pour une raison quelconque, le
this.user
contexte Koa n'est jamais défini lorsque vous appelez done (null, user) dans votre méthode deserializeUser.Vous pouvez donc écrire votre propre middleware après l'appel à app.use (passport.session ()) pour le mettre dans this.user comme ceci:
Si vous ne savez pas comment fonctionnent serializeUser et deserializeUser, contactez-moi sur Twitter. @yvanscher
la source