diff --git a/routes/login.js b/routes/login.js index 3570343..2882d9c 100644 --- a/routes/login.js +++ b/routes/login.js @@ -44,14 +44,38 @@ router.post("/", async (req, res) => { /* ================================ Prüfen ob User bereits eingeloggt + (aktive Session mit passendem Token) ================================= */ if (user.session_token) { - return res.render("index", { - error: "Dieser Account ist bereits eingeloggt. Bitte zuerst ausloggen.", - servers, - extraServers: [], - }); + // Prüfen ob wirklich eine aktive Session existiert + // durch Vergleich mit dem gespeicherten Token. + // Gibt es noch eine aktive Session → Login blockieren. + // Nach Server-Absturz ist session_token zwar gesetzt, + // aber keine gültige Session mehr vorhanden → + // Token wird einfach überschrieben (alter Login wird gekickt). + const hasActiveSession = req.sessionStore?.sessions + ? await new Promise((resolve) => { + req.sessionStore.all((err, sessions) => { + if (err || !sessions) return resolve(false); + const active = Object.values(sessions).some((s) => { + try { + const parsed = typeof s === "string" ? JSON.parse(s) : s; + return parsed?.user?.token === user.session_token; + } catch { return false; } + }); + resolve(active); + }); + }) + : false; + + if (hasActiveSession) { + return res.render("index", { + error: "Dieser Account ist bereits eingeloggt. Bitte zuerst ausloggen.", + servers, + extraServers: [], + }); + } } /* ================================