Bonjour à tous,

Je travaille actuellement sur l'implémentation d'un système de connexion pour mon site web avec express-session. Toutefois, j'ai rencontré un problème : lorsque je teste mon code avec Postman, tout fonctionne correctement, mais sur le navigateur (Firefox), la session ne semble pas se sauvegarder correctement se qui m'empêche de pouvoir verifié si un utilisateur est connecté
(J'utilise Vue.js pour le front)

Voici les symptômes :

  • Quand je teste via Postman, ma requête retourne bien une session complète avec l'utilisateur connecté, comme montré ci-dessous :
Session {
  cookie: {
    path: '/',
    _expires: 2024-12-25T10:19:06.237Z,
    originalMaxAge: 86400000,
    httpOnly: true,
    secure: false,
    sameSite: 'lax'
  },
  user: {
    _id: new ObjectId('6769b32a3e7297fc596228ed'),
    email: 'new@hotmail.com',
    password: '...',
    name: 'Louis',
    surname: 'Bertou',
    birthDate: '2024-12-12',
    __v: 0
  }
}
  • Cependant, lorsque je teste depuis le navigateur (Firefox), la session est vide, et je reçois uniquement le cookie sans la donnée utilisateur :
Session {
  cookie: {
    path: '/',
    _expires: 2024-12-25T10:29:36.721Z,
    originalMaxAge: 86400000,
    httpOnly: true,
    secure: false,
    sameSite: 'lax'
  }
}

Voici les requêtes que j'envoie pour tester la connexion :

Requête pour se connecter :

fetch("http://127.0.0.1:52807/user/login", {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(credentials),
    credentials: 'include',
});

Requête pour vérifier si l'utilisateur est connecté :

const response = await fetch('http://localhost:52807/user/connected', {
    method: 'GET',
    credentials: 'include',
});

Code côté serveur pour enregistrer la session à la connexion :

// Sauvegarde de l'utilisateur dans la session
req.session.user = user;
console.log("Session: ", req.session);
res.status(200).json({ message: "User logged in", userId: user._id });

Configuration CORS et session dans mon serveur Express :

// CORS
app.use(cors({
    origin: ['http://localhost:4173'],
    credentials: true,
    allowedHeaders: ['Content-Type', 'Authorization'],
    methods: ['GET', 'POST'],
    optionsSuccessStatus: 200,
}));

// Express-session
app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: true,
    saveUninitialized: true,
    cookie: {
        secure: false, // Non sécurisé car en développement (à mettre à true en production avec HTTPS)
        httpOnly: true,
        maxAge: 1000 * 60 * 60 * 24, // 1 jour
        sameSite: 'lax',
    },
}));

Questions :

  • Pourquoi la session ne semble-t-elle pas être sauvegardée correctement dans le navigateur, alors qu'elle fonctionne bien sur Postman ?
  • Est-ce que cela pourrait être lié à la configuration de CORS, ou à un problème avec les cookies (par exemple, sameSite, secure) ?
  • Y a-t-il un paramètre particulier à ajuster dans la configuration de express-session ou cors pour que cela fonctionne correctement sur le navigateur ?

Merci d'avance pour vos retours !

Aucune réponse