Redis
 sql >> Base de données >  >> NoSQL >> Redis

Dois-je implémenter la sérialisation et la désérialisation de NodesJS + Passport + RedisStore ?

Si vous utilisez des sessions vous devez fournir un passeport avec une fonction de sérialisation et de désérialisation. La mise en œuvre de Redis en tant que magasin de session n'a rien à voir avec la façon dont le passeport a été mis en œuvre, il ne traite que de l'endroit où les données de session sont stockées.

Mise en œuvre des sessions avec passeport

Comme je l'ai dit, les fonctions de sérialisation et de désérialisation doivent être fournies au passeport pour que les sessions fonctionnent.

Le but de la sérialisation fonction est de retourner suffisamment d'informations d'identification pour récupérer le compte d'utilisateur lors de toute demande ultérieure. Plus précisément, le deuxième paramètre du done() method est l'information sérialisée dans les données de session .

La désérialisation la fonction que vous fournissez est destinée à retourner le profil de l'utilisateur sur la base des informations d'identification qui ont été sérialisées pour la session .

Voici l'exemple du Passeport Guide dans la section traitant des sessions :

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

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

Dans l'exemple ci-dessus passport.serializeUser() est fourni une fonction qui prend deux paramètres, le profil de l'utilisateur (user ) et une fonction de rappel (done ). La fonction de rappel prend comme deuxième paramètre les informations d'identification (user.id , mais si vous utilisez mongoDB, cela peut être user._id ) requis pour récupérer le compte à partir de la base de données. Celui-ci sera appelé à chaque demande authentifiée et stocke les informations d'identification dans les données de session (que ce soit dans un cookie ou dans votre boutique Redis).

passport.deserializeUser() est fournie une fonction qui prend également deux paramètres, les informations d'identification (id ) et encore une fonction de rappel (done ). Les informations d'identification sont celles qui ont été sérialisées avec les données de session dans la requête précédente (user.id ). La fonction de rappel nécessite ici le profil utilisateur comme deuxième paramètre, ou toute erreur générée lors de la récupération du profil comme premier paramètre. Le User.findById() La fonction est une fonction de recherche du profil utilisateur dans la base de données. Dans cet exemple User l'objet est une instance d'un modèle de mangouste qui a le findById() fonction.

La fonction fournie à passport.deserializeUser() est appelé par le middleware de passeport, passport.session() avant la gestion de l'itinéraire pour stocker le profil de l'utilisateur (user ) à req.user .

Mettre en œuvre Redis en tant que magasin de sessions

Le but de l'utilisation de Redis est de stocker les données de session côté serveur afin que les seules données stockées côté client soient l'identifiant de session. Encore une fois, cela est indépendant de la façon dont vous avez implémenté le passeport, le passeport ne se soucie pas de l'endroit où les données de session sont stockées tant que vous avez ajouté le support de session à votre application. Cette question précédente sur stackoverflow explique comment implémenter Redis