fix: more robust cookie session

This commit is contained in:
Nathan FONTEYNE 2026-07-08 14:09:52 +02:00
parent d62596abcc
commit aca521b54f
2 changed files with 17 additions and 1 deletions

View file

@ -8,6 +8,10 @@ const apiRouter = require('./routes');
function createApp() { function createApp() {
const app = express(); const app = express();
// Behind Traefik: without this, req.protocol/req.secure ignore
// X-Forwarded-Proto and always report the plain-HTTP hop to the container.
app.set('trust proxy', 1);
app.get('/health', (req, res) => res.status(200).json({ status: 'ok' })); app.get('/health', (req, res) => res.status(200).json({ status: 'ok' }));
app.use(express.json()); app.use(express.json());

View file

@ -83,7 +83,13 @@ router.get(
code_challenge_method: 'S256', code_challenge_method: 'S256',
}); });
// Force the session write to complete (and surface any store error)
// before sending the redirect, instead of relying on express-session's
// implicit save-on-response-end behavior.
req.session.save((err) => {
if (err) throw err;
res.redirect(authUrl.href); res.redirect(authUrl.href);
});
}) })
); );
@ -97,6 +103,12 @@ router.get(
const oidcConfig = getOidcConfig(); const oidcConfig = getOidcConfig();
const pending = req.session.oidc; const pending = req.session.oidc;
if (!pending) { if (!pending) {
console.warn(
'[auth] /auth/callback reached with no pending OIDC state.',
'sessionID:', req.sessionID,
'cookie header present:', Boolean(req.headers.cookie),
'session keys:', Object.keys(req.session || {}),
);
return res.status(400).send('Session de connexion expirée, réessayez.'); return res.status(400).send('Session de connexion expirée, réessayez.');
} }