Estoy tratando de usar la función de autorización de Socket.IO para obtener datos de la sesión. El problema es que incluso si cierro la sesión y destruyo mi sesión, Socket.IO todavía tiene la información de la sesión anterior, lo que claramente no es ideal. ¿Alguna idea de lo que estoy haciendo mal en el siguiente código?La función de autorización de Socket.io no está actualizando los datos de la sesión
io.set('authorization', function (data, accept) {
if(data.headers.cookie) {
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
app.set('mongo-store').get(data.sessionID, function (err, session) {
console.log(err, session);
if (err || !session) {
// if we cannot grab a session, turn down the connection
accept('Error', false);
} else {
// save the session data and accept the connection
data.session = session;
accept(null, true);
}
});
} else {
return accept('No cookie transmitted.', false);
}
accept(null, true);
});
Y aquí es el código de conexión:
io.sockets.on('connection', function(socket) {
var hs = socket.handshake;
console.log('A socket with sessionID ' + hs.sessionID
+ ' connected!');
// setup an inteval that will keep our session fresh
var intervalID = setInterval(function() {
// reload the session (just in case something changed,
// we don't want to override anything, but the age)
// reloading will also ensure we keep an up2date copy
// of the session with our connection.
hs.session.reload(function() {
// "touch" it (resetting maxAge and lastAccess)
// and save it back again.
hs.session.touch().save();
});
}, 60 * 1000);
socket.on('disconnect', function() {
console.log('A socket with sessionID ' + hs.sessionID
+ ' disconnected!');
// clear the socket interval to stop refreshing the session
clearInterval(intervalID);
});
});
+1 Estoy teniendo el mismo problema. Incluso si la cookie de sesión del cliente caduca o se elimina, la conexión Socket.IO aún tiene acceso a los datos anteriores y cree que la sesión todavía está activa. – dbau