Enhance session ID handling in image upload route by refining extraction logic to prioritize cookie-based session IDs and fall back to req.sessionID when necessary. Improve logging for better debugging and client lookup, ensuring a more robust user authentication process during uploads.

This commit is contained in:
Torsten Schulz (local)
2025-12-05 11:24:52 +01:00
parent 0b82a47a69
commit c998e32825

View File

@@ -63,16 +63,44 @@ export function setupRoutes(app, __dirname) {
} }
// Prüfe, ob Benutzer eingeloggt ist // Prüfe, ob Benutzer eingeloggt ist
// Verwende extractSessionId wie in broadcast.js, um die gleiche Session-ID zu erhalten // Versuche zuerst, Session-ID aus Cookie zu extrahieren (wie beim Login)
const sessionId = extractSessionId(req); let sessionId = extractSessionId(req);
console.log(`[Bild-Upload] Session-ID (aus Cookie): ${sessionId}, req.sessionID: ${req.sessionID}, Alle Clients:`, Array.from(getClientsMap().keys())); // Wenn extractSessionId eine UUID generiert hat (kein Cookie gefunden),
// versuche req.sessionID zu verwenden
const isUUID = sessionId && sessionId.length === 36 && sessionId.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i);
if (isUUID) {
// extractSessionId hat eine UUID generiert, verwende req.sessionID stattdessen
sessionId = req.sessionID;
if (sessionId && sessionId.startsWith('s:')) {
const parts = sessionId.split('.');
if (parts.length > 0) {
sessionId = parts[0].substring(2); // Entferne 's:' Präfix
}
}
}
console.log(`[Bild-Upload] Session-ID: ${sessionId}, req.sessionID (roh): ${req.sessionID}, Cookie vorhanden: ${!isUUID}, Alle Clients:`, Array.from(getClientsMap().keys()));
const clientsMap = getClientsMap(); const clientsMap = getClientsMap();
const client = clientsMap.get(sessionId); let client = clientsMap.get(sessionId);
// Wenn kein Client gefunden wurde und req.sessionID vorhanden ist, versuche auch mit bereinigter req.sessionID
if (!client && req.sessionID) {
const cleanedSessionId = req.sessionID.startsWith('s:') ? req.sessionID.split('.')[0].substring(2) : req.sessionID;
if (cleanedSessionId !== sessionId) {
client = clientsMap.get(cleanedSessionId);
if (client) {
console.log(`[Bild-Upload] Client gefunden mit bereinigter req.sessionID: ${cleanedSessionId}`);
sessionId = cleanedSessionId;
}
}
}
if (!client || !client.userName) { if (!client || !client.userName) {
console.log(`[Bild-Upload] Client nicht gefunden für Session-ID: ${sessionId}`); 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 // Lösche hochgeladenes Bild, wenn nicht eingeloggt
unlinkSync(req.file.path); unlinkSync(req.file.path);
return res.status(401).json({ error: 'Nicht eingeloggt' }); return res.status(401).json({ error: 'Nicht eingeloggt' });