Impossible que `cookieSession` fonctionne avec` maxAge`

** RESOLU **

Je lutte avec celui-ci depuis un moment. Il y a beaucoup de messages similaires, mais aucune des solutions proposées ne fonctionne pour moi.

J’utilise Express et Passport avec des sessions de cookies. Quand je passe juste le secret à cookieSession tout fonctionne bien:

 app.use(express.cookieParser('MySecret')); app.use(express.cookieSession('MySecret')); app.use(passport.initialize()); app.use(passport.session()); 

Mais le cookie par défaut est basé sur une session et il s’efface dès que vous fermez votre navigateur. J’ai besoin d’un cookie limité dans le temps. J’ai donc essayé d’utiliser les options supposées supscopes:

 app.use(express.cookieParser('MySecret')); app.use(express.cookieSession({ secret: 'MySecret', cookie: { maxAge: 365 * 24 * 60 * 60 * 1000 } })); app.use(passport.initialize()); app.use(passport.session()); 

Et ça cesse de fonctionner. Apparemment, le cookie est défini dans mon navigateur et a l’air bien, mais il n’y a pas de req.user , et les demandes suivantes ne sont pas authentifiées.

J’ai essayé d’utiliser maxage au lieu de maxAge sans succès. Je peux passer à la même configuration, mais en utilisant express.session() au lieu de express.cookieSession() , cela fonctionne, mais la session est perdue lors du redémarrage du serveur.

De l’aide?

edit: je suis sur Express 3.20.2 btw

C’était une erreur de l’utilisateur. Je ne suis pas sûr de savoir où j’ai obtenu la syntaxe permettant de transmettre uniquement le secret sous forme de chaîne à cookieSession() mais cela n’est pas valide. Il est ignoré et utilise req.secret qui est défini par l’ cookieParser('MySecret') .

C’est pourquoi il fonctionnait avec le code d’origine. Je pense toujours que c’est un moment wtf, car la deuxième syntaxe devrait quand même fonctionner, mais ce n’est pas le cas. Cela se résume à cet extrait du module cookieSession :

 if (!options.secret && req.secret) { req.session = req.signedCookies[key] || {}; req.session.cookie = cookie; } else { // TODO: refactor var rawCookie = req.cookies[key]; if (rawCookie) { var unsigned = cookieParser.signedCookie(rawCookie, secret); if (unsigned) { var original = unsigned; req.session = cookieParser.JSONCookie(unsigned) || {}; req.session.cookie = cookie; } } } 

Ainsi, lorsque vous transmettez un secret dans les options de cookieSession il tombe dans le bloc else et finit par définir un cookie différent? Je ne sais pas, mais ça ressemble à un bug. Si j’utilise le même secret pour cookieParser et cookieSession il devrait être bon. Mais peu importe…

========

tl; dr ça doit être ça:

 app.use(express.cookieParser('MySecret')); app.use(express.cookieSession({ cookie: { maxAge: 30 * 24 * 60 * 60 * 1000 } }));