PassportJS serializeUser und deserializeUser Ausführungsablauf

Ich verwende PassportJS mit Express, um Benutzer anhand der lokalen Strategie zu authentifizieren. Ich habe nur wenige Artikel über die Einrichtung des Passes und den Ablauf der Ausführung gesehen. Obwohl das meiste, was den Pass betrifft, durch Suchen herausgefunden werden kann, gibt es eine Serialisierung und Deserialisierung des Benutzers, die mich verwirrt.

Ich verstehe, es wird verwendet, um die Benutzerinformationen in der Sitzung für die dauerhafte Anmeldung zu speichern. Mein Code für die Serialisierung und Deserialisierung lautet

passport.serializeUser(function(user, done){
    done(null, user.id);
});

passport.deserializeUser(function(id, done){
    User.findById(id, function(err, user){
        done(err, user);
    });
});

Meine Frage zu diesem

1) Wer ruft die Argumente von serializeUser und deserializeUser auf und füllt sie auf? Und wie hat es Zugriff auf das Benutzerobjekt? Um dies zu verstehen, habe ich log wie @ hinzugefü

 passport.serializeUser(function(user, done){
    console.log(arguments.callee.caller);
    done(null, user.id);
});

Und bekam [Funktion: bestanden] in Ausgabe Kann jemand das erklären?

2) Ich verwende Mongodb, um die Benutzerinformationen zu speichern. MongoDB hat _id als Standard-ID des Dokuments. Idealerweise hätten serializeUser und deserializeUser mit user._id anstelle von user.id zusammenarbeiten sollen. Aber es funktioniert gut mit user.id, die in User das Objekt nicht verfügbar ist. Hier ist das Benutzerobjekt, das in console @ gedruckt wurd

{ _id: 5505f231b810dbd4098ac76a,
  __v: 0,
  google: {},
  twitter: {},
  facebook: {},
  local:
   { password: '$2a$08$9NGd0xNu0JbWMZ07ufyFRu8guwy147k8IBl5cAC4Y8APOuxreNI32',
     email: '[email protected]' } }

Wie ist das möglich

3) Wo der Kontrollfluss einmal ausgeführt wirddone Methode wird ausgeführt?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage