Wie würden Sie einem Laien den Workflow der Serialisierungs- und Deserialisierungsmethoden von Passport erklären?
Wohin geht das
user.id
, nachdempassport.serializeUser
es gerufen wurde?Wir rufen
passport.deserializeUser
gleich danach an, wo passt es in den Workflow?// 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); }); });
Ich versuche immer noch, meinen Kopf darum zu wickeln. Ich habe eine vollständig funktionierende App und stoße auf keinerlei Fehler.
Ich wollte nur verstehen, was genau hier passiert?
Jede Hilfe wird geschätzt.
user.id
gespeichert alsreq.session.passport.user
oderuser
selbst gespeichert alsreq.session.passport.user
req.session.passport.user = {id: '..'}
Teil des Diagramms leicht abweichend und solltereq.session.passport.user = 785352
stattdessen sein, wo785352
istuser.id
. Ich habe Probleme mit der Konsolenprotokollierung, um dies zu beweisen, aber es scheint sinnvoll zu sein. Wenn Sie anrufendone(null, user.id);
, ist es sinnvoll, das zweite Argument -user.id
in diesem Fall - zu verwendenreq.session.passport.user
, anstatt es zuzuweisenreq.session.passport.user.id
. Denn was ist, wenn Sie stattdessen vorbeikommenuser
?req.sesssion.passport.user.id = user
würde keinen Sinn ergeben.Für alle, die Koa und Koa-Pass verwenden :
Beachten Sie, dass der in der serializeUser-Methode festgelegte Schlüssel für den Benutzer (häufig eine eindeutige ID für diesen Benutzer) gespeichert wird in:
this.session.passport.user
Wenn Sie
done(null, user)
in deserializeUser festlegen, dass 'user' ein Benutzerobjekt aus Ihrer Datenbank ist:this.req.user
ODERthis.passport.user
aus irgendeinem Grund
this.user
Koa-Kontext nie festgelegt, wenn Sie in Ihrer deserializeUser-Methode done (null, user) aufrufen.Sie können also nach dem Aufruf von app.use (passport.session ()) Ihre eigene Middleware schreiben, um sie wie folgt in this.user einzufügen:
Wenn Sie sich nicht sicher sind, wie serializeUser und deserializeUser funktionieren, melden Sie sich einfach bei Twitter. @yvanscher
quelle