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:
@@ -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' });
|
||||||
|
|||||||
Reference in New Issue
Block a user