J'utilise node/express avec passeport dans mon développement. Je suis tombé sur un article qui dit:
Express charge les données de session et les attache à la demande. Comme le passeport stocke l'utilisateur sérialisé dans la session, l'objet utilisateur sérialisé peut être trouvé sur req.session.passport.user.
Mais à ma grande surprise, la valeur des magasins sessionID dans les cookies du navigateur reste la même avant et après la connexion. Alors, où l'objet utilisateur sérialisé est-il stocké?
Je pensais qu'il était initialement stocké dans le cookie utilisateur sessionid
mais il semble que ce ne soit pas le cas car je peux toujours accéder à mon objet utilisateur avec req.session.passport.user
Alors, où l'objet utilisateur sérialisé est-il stocké?
En bref
L'objet utilisateur sérialisé est stocké dans req.user
par PassportJS
extrait de req.session.passport.user
(qui est rempli par Express
) à l'aide de Passport's
deserializeUser
méthode.
Express
ajoute l'identifiant de l'objet session dans un cookie sur le navigateur de l'utilisateur, qui est renvoyé pour être exprimé dans un en-tête à chaque demande. Express
prend ensuite l'ID de l'en-tête et recherche le magasin de session (c'est-à-dire Mongo ou autre) et trouve l'entrée et la charge dans req.session
.
PassportJS
utilise le contenu de req.session
pour suivre l'utilisateur authentifié à l'aide des méthodes serializeUser
et deserializeUser
(pour plus d'informations sur le workflow de serializeUser
et deserializeUser
voir ma réponse dans ce SO question ).
Express
est responsable de la création de la session. quand les sessions sont-elles créées? C'est alors que Express
ne détecte pas de cookie de session. Ainsi, l'ordre dans lequel vous organisez vos configurations session
et passport
dans vos app
ou server.js
le fichier est très important. Si vous déclarez vos configurations session
et passport
ci-dessus static directory configs
puis toutes les demandes de static content
obtiendra également une session, ce qui n'est pas bon.
Voir ma réponse à cela SO question , où j'ai mentionné l'accès au contenu statique ainsi que la façon d'appliquer sélectivement passport
à certains itinéraires, plutôt que la valeur par défaut (vous n'aurez peut-être pas besoin d'authentifier toutes les routes - par conséquent, vous pourriez éviter les session store lookup
et de-serialization
en attachant la session uniquement aux demandes mappant vers des URL sécurisées (voir ci-dessous).
//selectively applying passport to only secure urls
app.use(function(req, res, next){
if(req.url.match('/xxxx/secure'))
passport.session()(req, res, next)
else
next(); // do not invoke passport
});
Il y a un incroyable tutoriel que je vous recommande fortement de lire si vous voulez comprendre le flux de travail de PassportJS.
Vous pouvez regarder le sessionID
dans le cookie comme clé d'une base de données où les données de session sont stockées. Selon le gestionnaire de session que vous utilisez avec express et la politique de stockage que vous utilisez, les données seront stockées de différentes manières. Cela signifie que l'ID session peut avoir la même valeur avant la connexion, après une connexion réussie et même après la déconnexion d'un utilisateur.
Si vous utilisez express-session avec MemoryStore
les données seront enregistrées dans la mémoire du processus de noeud, indexées sur l'ID de session. Recherchez ici initialisation du magasin et ici stockage des données.
Vous pouvez créer un magasin dans lequel les données sont sérialisées dans le cookie, mais aucun de ceux-ci n'est répertorié dans magasins de session compatibles .