Assez simple. Je place un cookie comme ceci dans mon /user/login
route :
if (rememberMe) {
console.log('Login will remembered.');
res.cookie('user', userObj, { signed: true, httpOnly: true, path: '/' });
}
else {
console.log('Login will NOT be remembered.');
}
J'ai déjà défini mon secret pour le cookie-parser :
app.use(cookieParser('shhh!'));
C'est plutôt basique. Tout fonctionne parfaitement dans la mesure où je peux récupérer ce que j'ai stocké dans le cookie :
app.use(function (req, res, next) {
if (req.signedCookies.user) {
console.log('Cookie exists!');
req.session.user = req.signedCookies.user;
}
else {
console.log('No cookie found.');
}
next();
});
Ce middleware est appelé avant toute autre chose, donc pour le bien de l'argument "Cookie exists !" est toujours enregistré dans ma console si le cookie est valide.
Le problème se pose lorsque j'essaie de supprimer le cookie. J'ai essayé res.clearCookie('user')
, res.cookie('user', '', { expires: new Date() })
et j'ai essayé de passer les mêmes drapeaux (que je passe à res.cookie()
en /user/login
). J'ai essayé d'utiliser des combinaisons de ces méthodes, mais rien n'a fonctionné.
Actuellement, la seule façon d'effacer le cookie (et de ne pas recevoir le message "Cookie exists !") est d'effacer l'historique de mon navigateur. Voici à quoi ressemble mon parcours de déconnexion :
route.get('/user/logout', function (req, res, next) {
res.clearCookie('user');
req.session.destroy();
util.response.ok(res, 'Successfully logged out.');
});
Il semble que je ne puisse même pas modifier la valeur du cookie ; je mets
res.cookie('user', {}, { signed: true, httpOnly: true, path: '/' })
dans mon parcours de déconnexion, mais la valeur du cookie reste inchangée.