Als u sessies gebruikt je moet het paspoort voorzien van een serialisatie- en deserialize-functie. Het implementeren van Redis als een sessieopslag heeft niets te maken met hoe het paspoort werd geïmplementeerd, het gaat alleen over waar de sessiegegevens worden opgeslagen.
Sessies implementeren met paspoort
Zoals ik al zei, moeten de functies voor serialiseren en deserialiseren aan het paspoort worden geleverd om sessies te laten werken.
Het doel van de serialiseren functie is om voldoende identificerende informatie te retourneren om het gebruikersaccount te herstellen bij eventuele volgende verzoeken. Met name de tweede parameter van de done()
methode is de informatie geserialiseerd in de sessiegegevens .
De deserialiseren functie die u verstrekt, is bedoeld om het gebruikersprofiel te retourneren op basis van de identificerende informatie die is geserialiseerd naar de sessie .
Hier is het voorbeeld uit de Paspoortgids in het gedeelte over sessies:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
In het bovenstaande voorbeeld passport.serializeUser()
is voorzien van een functie die twee parameters nodig heeft, het gebruikersprofiel (user
) en een callback-functie (done
). De callback-functie neemt als tweede parameter de identificerende informatie (user.id
.) , maar als je mongoDB gebruikt, kan dit user._id
zijn ) vereist om het account uit de database te herstellen. Dit wordt aangeroepen bij elk geverifieerd verzoek en slaat de identificerende informatie op in de sessiegegevens (of dat nu in een cookie is of in uw Redis-winkel).
passport.deserializeUser()
is voorzien van een functie die ook twee parameters nodig heeft, de identificerende informatie (id
) en opnieuw een callback-functie (done
). De identificerende informatie is wat werd geserialiseerd naar de sessiegegevens in het vorige verzoek (user.id
). De callback-functie vereist hier het gebruikersprofiel als tweede parameter, of een fout bij het ophalen van het profiel als eerste parameter. De User.findById()
functie is een opzoekfunctie voor het gebruikersprofiel in de database. In dit voorbeeld User
object is een instantie van een mangoestmodel met de findById()
functie.
De functie geleverd aan passport.deserializeUser()
wordt aangeroepen door de paspoort-middleware, passport.session()
voorafgaand aan de routeafhandeling om het gebruikersprofiel op te slaan (user
) naar req.user
.
Redis implementeren als Session Store
Het doel van het gebruik van Redis is het opslaan van sessiegegevens aan de serverzijde, zodat de enige gegevens die aan de clientzijde worden opgeslagen de sessie-ID is. Nogmaals, dit is onafhankelijk van hoe je paspoort hebt geïmplementeerd, het maakt het paspoort niet uit waar de sessiegegevens worden opgeslagen, zolang je sessie-ondersteuning aan je app hebt toegevoegd. Deze vorige vraag over stackoverflow gaat over het implementeren van Redis