websockets implemented
This commit is contained in:
@@ -16,38 +16,54 @@ redisClient.connect().catch(console.error);
|
||||
|
||||
const setUserSession = async (userId, sessionData) => {
|
||||
try {
|
||||
await redisClient.hSet(`user:${userId}`, sessionData);
|
||||
await redisClient.sendCommand(['JSON.SET', `user:${userId}`, '.', JSON.stringify(sessionData)]);
|
||||
console.log(userId, sessionData);
|
||||
const sessionDataStr = await redisClient.sendCommand(['JSON.GET', `user:${userId}`]);
|
||||
console.log(sessionDataStr);
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Setzen der Benutzersitzung:', error);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const deleteUserSession = async (userId) => {
|
||||
try {
|
||||
await redisClient.del(`user:${userId}`);
|
||||
const result = await redisClient.del(`user:${userId}`);
|
||||
if (result === 1) {
|
||||
console.log(`Benutzersitzung für Benutzer ${userId} erfolgreich gelöscht.`);
|
||||
} else {
|
||||
console.warn(`Benutzersitzung für Benutzer ${userId} war nicht vorhanden.`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Löschen der Benutzersitzung:', error);
|
||||
}
|
||||
};
|
||||
|
||||
const convertToOriginalType = (value) => {
|
||||
if (value === 'true') return true;
|
||||
if (value === 'false') return false;
|
||||
if (!isNaN(value) && value.trim() !== '') return Number(value);
|
||||
return value;
|
||||
};
|
||||
|
||||
const getUserSession = async (userId) => {
|
||||
try {
|
||||
return await redisClient.hGetAll(`user:${userId}`);
|
||||
const sessionData = await redisClient.sendCommand(['JSON.GET', `user:${userId}`]);
|
||||
return JSON.parse(sessionData);
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Abrufen der Benutzersitzung:', error);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const updateUserTimestamp = async (hashedId) => {
|
||||
const updateUserTimestamp = async (userId) => {
|
||||
try {
|
||||
const userKey = `user:${hashedId}`;
|
||||
const userKey = `user:${userId}`;
|
||||
const userExists = await redisClient.exists(userKey);
|
||||
if (userExists) {
|
||||
await redisClient.hSet(userKey, 'timestamp', Date.now());
|
||||
console.log(`Zeitstempel für Benutzer ${hashedId} aktualisiert.`);
|
||||
} else {
|
||||
console.warn(`Benutzer mit der hashedId ${hashedId} wurde nicht gefunden.`);
|
||||
const sessionDataString = await redisClient.sendCommand(['JSON.GET', `user:${userId}`]);
|
||||
const sessionData = JSON.parse(sessionDataString);
|
||||
sessionData.timestamp = Date.now();
|
||||
await redisClient.sendCommand(['JSON.SET', `user:${userId}`, '.', JSON.stringify(sessionData)]);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Aktualisieren des Zeitstempels:', error);
|
||||
@@ -58,17 +74,29 @@ const cleanupExpiredSessions = async () => {
|
||||
try {
|
||||
const keys = await redisClient.keys('user:*');
|
||||
const now = Date.now();
|
||||
|
||||
for (const key of keys) {
|
||||
const session = await redisClient.hGetAll(key);
|
||||
if (session.timestamp && now - parseInt(session.timestamp) > EXPIRATION_TIME) {
|
||||
const userId = key.split(':')[1];
|
||||
await redisClient.del(key);
|
||||
await User.update({ authCode: '' }, { where: { hashedId: userId } });
|
||||
console.log(`Abgelaufene Sitzung für Benutzer ${userId} gelöscht.`);
|
||||
try {
|
||||
const sessionStr = await redisClient.sendCommand(['JSON.GET', key]);
|
||||
if (sessionStr) {
|
||||
const session = JSON.parse(sessionStr);
|
||||
if (session.timestamp && now - parseInt(session.timestamp) > EXPIRATION_TIME) {
|
||||
const userId = key.split(':')[1];
|
||||
await redisClient.del(key);
|
||||
await User.update({ authCode: '' }, { where: { hashedId: userId } });
|
||||
console.log(`Abgelaufene Sitzung für Benutzer ${userId} mit RedisJSON gelöscht.`);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
if (error.message.includes('WRONGTYPE')) {
|
||||
console.warn(`Schlüssel ${key} ist kein JSON-Objekt, wird übersprungen.`);
|
||||
} else {
|
||||
console.error(`Fehler beim Bereinigen für Schlüssel ${key}:`, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Fehler beim Bereinigen abgelaufener Sitzungen:', error);
|
||||
console.error('Fehler beim Bereinigen abgelaufener Sitzungen mit RedisJSON:', error);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user