Comment le passeport js stocke-t-il l'objet utilisateur dans la session?
Je suis l'aide d'un noeud/express avec passeport dans mon développement. Je suis tombé sur un article qui dit:
Exprimer charge les données de session et l'attache à la req. Comme passeport magasins de la sérialisés utilisateur dans la session, l'utilisateur de l'objet sérialisé peut être trouvé à la req.session.le passeport.de l'utilisateur.
Mais à ma grande surprise, la valeur de sessionID magasins dans le navigateur les cookies restent les mêmes avant et après la connexion. D'où vient donc la sérialisés objet utilisateur est stocké?
J'ai pensé qu'il était stocké dans le manuel d' sessionid
cookie au départ, mais il semble que ce n'est pas le cas comme je l'ai toujours accès à mes utilisateur de l'objet avec req.session.passport.user
source d'informationauteur desmondlee
Vous devez vous connecter pour publier un commentaire.
En Bref
Sérialisées objet utilisateur est stocké dans
req.user
parPassportJS
prises dereq.session.passport.user
(qui est peuplée parExpress
) avec l'aide dePassport's
deserializeUser
méthode.Express
ajoute l'id de l'objet de session dans un cookie sur le navigateur de l'utilisateur, qui est renvoyé à exprimer dans un en-tête sur chaque demande.Express
prend alors l'id à partir de l'en-tête et de la recherche, de la session de store (c'est à dire Mongo ou quoi que ce soit) et de trouver l'entrée et de la charge àreq.session
.PassportJS
utilise le contenu dereq.session
de garder une trace de l'utilisateur authentifié à l'aide deserializeUser
etdeserializeUser
méthodes (pour plus d'informations sur les flux de travail deserializeUser
etdeserializeUser
voir ma réponse dans ce question).Express
est responsable de la création de la session. quand les séances se crée? C'est quandExpress
ne détecte pas un cookie de session. Donc l'ordre dans lequel vous pouvez organiser vossession
etpassport
configs dans votreapp
ouserver.js
fichier est très important. Si vous déclarez votresession
etpassport
configs ci-dessusstatic directory configs
puis toutes les demandes destatic content
obtiendrez également une session, ce qui n'est pas bon.Voir ma réponse à cette SORTE questionoù je l'ai mentionné à propos du contenu statique d'accès ainsi que la façon d'appliquer de manière sélective
passport
de certaines routes, plutôt que par défaut (vous ne pourriez pas besoin d'authentifier toutes les routes, on pourrait éviter d'inutilessession store lookup
etde-serialization
par la fixation de session uniquement pour les demandes de carte de sécuriser les URLS voir ci-dessous).Il y en a un incroyable tutoriel que je vous recommande vivement de lire si vous voulez comprendre le flux de travail de PassportJS.
Vous pouvez regarder le
sessionID
dans le cookie comme une clé dans une base de données où les données de session sont stockées. Selon ce gestionnaire de session que vous utilisez avec les exprimer, et que la politique de stockage que vous utilisez les données seront stockées dans différentes manières. Cela signifie que le sessionID peut être la même valeur à la fois avant la connexion, après une connexion réussie, et même après qu'un utilisateur se déconnecte.Si vous utilisez express-session avec
MemoryStore
les données seront enregistrées dans la mémoire du nœud de processus, indexé sur l'id de session. Regardez ici pour initialisation de la boutique et ici pour stocker des données.Vous pouvez créer un magasin où les données sont sérialisées dans le cookie, mais aucun de ceux répertoriés dans le compatible session magasins.