diff --git a/src/web/auth.js b/src/web/auth.js index d89c90e..8dce2a2 100644 --- a/src/web/auth.js +++ b/src/web/auth.js @@ -128,8 +128,12 @@ export function registerAuthRoutes(app, client) { // Mit gesetzter Cookie-Domain (z. B. .d4rkst3r.de) gilt die Anmeldung // auf Hub und Bot-Seite gleichzeitig const domain = cookieDomain(); + reply.clearCookie(STATE_COOKIE, { path: '/auth' }); + // Altlast aufräumen: ein früher host-gebunden gesetztes Cookie würde + // sonst neben dem neuen bestehen bleiben und beim Abmelden übrig sein + if (domain) reply.clearCookie(SESSION_COOKIE, { path: '/' }); + return reply - .clearCookie(STATE_COOKIE, { path: '/auth' }) .setCookie(SESSION_COOKIE, JSON.stringify(session), { path: '/', httpOnly: true, sameSite: 'lax', maxAge: 7 * 24 * 3600, signed: true, ...(domain ? { domain } : {}), @@ -140,9 +144,13 @@ export function registerAuthRoutes(app, client) { }); app.get('/auth/logout', async (request, reply) => { + // Beide Varianten löschen: Ein Cookie, das ohne Domain-Angabe gesetzt + // wurde, gilt nur für genau diesen Host und ist ein anderes als das + // domain-weite. Wer sich vor der Umstellung angemeldet hat, hat noch + // das alte — würden wir nur eins löschen, bliebe er angemeldet. + reply.clearCookie(SESSION_COOKIE, { path: '/' }); const domain = cookieDomain(); - return reply - .clearCookie(SESSION_COOKIE, { path: '/', ...(domain ? { domain } : {}) }) - .redirect('/'); + if (domain) reply.clearCookie(SESSION_COOKIE, { path: '/', domain }); + return reply.redirect('/'); }); }