diff --git a/server/routes.js b/server/routes.js index e27a59c..4b13781 100644 --- a/server/routes.js +++ b/server/routes.js @@ -62,6 +62,12 @@ export function setupRoutes(app, __dirname) { return res.status(400).json({ error: 'Kein Bild hochgeladen' }); } + // WICHTIG: Modifiziere req.session, damit Express-Session das Cookie setzt + // (saveUninitialized: false bedeutet, dass das Cookie nur gesetzt wird, wenn req.session modifiziert wird) + if (!req.session.initialized) { + req.session.initialized = true; + } + // Prüfe, ob Benutzer eingeloggt ist // Versuche zuerst, Session-ID aus Cookie zu extrahieren (wie beim Login) let sessionId = extractSessionId(req); @@ -98,12 +104,34 @@ export function setupRoutes(app, __dirname) { } } + // Wenn kein Client gefunden wurde, versuche Fallback: Finde den zuletzt aktiven Client mit aktivem Socket if (!client || !client.userName) { console.log(`[Bild-Upload] Client nicht gefunden für Session-ID: ${sessionId}`); console.log(`[Bild-Upload] Cookies: ${req.headers.cookie || 'keine'}`); - // Lösche hochgeladenes Bild, wenn nicht eingeloggt - unlinkSync(req.file.path); - return res.status(401).json({ error: 'Nicht eingeloggt' }); + + // Fallback: Suche nach dem zuletzt aktiven Client mit aktivem Socket + let fallbackClient = null; + let latestActivity = 0; + + for (const [sid, c] of clientsMap.entries()) { + if (c.userName && c.socket && c.socket.connected) { + const activityTime = c.lastActivity ? c.lastActivity.getTime() : 0; + if (activityTime > latestActivity) { + latestActivity = activityTime; + fallbackClient = c; + } + } + } + + // Wenn ein Fallback-Client gefunden wurde und er kürzlich aktiv war (innerhalb der letzten 5 Minuten) + if (fallbackClient && latestActivity > Date.now() - 5 * 60 * 1000) { + console.log(`[Bild-Upload] Fallback: Verwende zuletzt aktiven Client: ${fallbackClient.userName} (Session-ID: ${fallbackClient.sessionId})`); + client = fallbackClient; + } else { + // Lösche hochgeladenes Bild, wenn nicht eingeloggt + unlinkSync(req.file.path); + return res.status(401).json({ error: 'Nicht eingeloggt' }); + } } // Generiere eindeutigen Code für das Bild @@ -208,6 +236,12 @@ export function setupRoutes(app, __dirname) { // Session-Status-Endpoint app.get('/api/session', (req, res) => { try { + // WICHTIG: Modifiziere req.session, damit Express-Session das Cookie setzt + // (saveUninitialized: false bedeutet, dass das Cookie nur gesetzt wird, wenn req.session modifiziert wird) + if (!req.session.initialized) { + req.session.initialized = true; + } + const sessionId = req.sessionID; console.log('Session-Check - SessionID:', sessionId); console.log('Session-Check - Alle Clients:', Array.from(getClientsMap().keys()));