sql >> Database teknologi >  >> NoSQL >> Redis

Implementerer jeg serialisering og deserialisering af NodesJS + Passport + RedisStore?

Hvis du bruger sessioner du skal give pas med en serialiserings- og deserialiseringsfunktion. Implementering af Redis som en sessionsbutik har intet at gøre med, hvordan passet blev implementeret, det handler kun om, hvor sessionsdataene er gemt.

Implementering af sessioner med pas

Som jeg sagde, skal serialiserings- og deserialiseringsfunktionerne leveres til passet, for at sessionerne kan fungere.

Formålet med serialiseringen Funktionen er at returnere tilstrækkelige identifikationsoplysninger til at gendanne brugerkontoen ved eventuelle efterfølgende anmodninger. Specifikt den anden parameter i done() metode er informationen serialiseret i sessionsdataene .

deserialisering funktion, som du angiver, er beregnet til at returnere brugerprofilen baseret på de identificerende oplysninger, der blev serialiseret til sessionen .

Her er eksemplet fra pasguiden i afsnittet, der diskuterer sessioner:

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

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

I eksemplet ovenfor passport.serializeUser() leveres med en funktion, der tager to parametre, brugerprofilen (user ) og en tilbagekaldsfunktion (done ). Tilbagekaldsfunktionen tager som sin anden parameter de identificerende oplysninger (user.id , men hvis du bruger mongoDB kan dette være user._id ) påkrævet for at gendanne kontoen fra databasen. Dette vil blive kaldt på hver autentificeret anmodning og gemmer de identificerende oplysninger i sessionsdataene (uanset om det er i en cookie eller din Redis-butik).

passport.deserializeUser() leveres med en funktion, der også tager to parametre, den identificerende information (id ) og igen en tilbagekaldsfunktion (done ). Identifikationsoplysningerne er det, der blev serialiseret til sessionsdataene i den tidligere anmodning (user.id ). Tilbagekaldsfunktionen her kræver brugerprofilen som dens anden parameter, eller enhver fejl ved at hente profilen som dens første parameter. User.findById() funktion er en opslagsfunktion for brugerprofilen i databasen. I dette eksempel User objekt er en forekomst af en mangustmodel, som har findById() funktion.

Funktionen til passport.deserializeUser() kaldes af passets middleware, passport.session() før rutehåndteringen for at gemme brugerprofilen (user ) til req.user .

Implementering af Redis som en sessionsbutik

Formålet med at bruge Redis er at gemme sessionsdataserversiden, så den eneste datalagrede klientside er sessions-id'et. Igen, dette er uafhængigt af, hvordan du har implementeret pas. Passport er ligeglad med, hvor sessionsdataene gemmes, så længe du har tilføjet sessionssupport til din app. Dette forrige spørgsmål om stackoverflow omhandler, hvordan Redis implementeres



  1. Betinget gruppering med $ findes inde i $cond

  2. Få navne på alle nøgler i samlingen

  3. Sådan implementeres ML-modeller til produktion

  4. Effektiv måde at kortlægge data fra Redis