From bdbd35883c30fd141f43802b0d524e29950b5fe2 Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Fri, 31 Jul 2026 15:35:30 +0200 Subject: [PATCH] =?UTF-8?q?Abmelden=20=C3=BCber=20beide=20Domains=20repari?= =?UTF-8?q?eren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auf der Bot-Seite ließ sich das Abmelden nicht durchführen, und auf dem Hub kam beim Profil ein 401 — beides dieselbe Ursache: Ein Cookie, das ohne Domain-Angabe gesetzt wurde, gilt nur für genau diesen Host und ist technisch ein anderes als das domain-weite. Wer sich vor dem Umstellen auf die gemeinsame Login-Domain angemeldet hatte, trug also noch das alte, host-gebundene Cookie mit sich herum. Das Abmelden löschte nur die domain-weite Variante, das alte blieb liegen — und auf der Hub-Domain war es nie vorhanden, daher dort die fehlende Anmeldung. Jetzt räumt das Abmelden beide Varianten ab, und das Anmelden entfernt die host-gebundene Altlast gleich mit, damit gar nicht erst zwei Cookies nebeneinander existieren. Co-Authored-By: Claude Fable 5 --- src/web/auth.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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('/'); }); }