Usando socket.io, he hecho esto de una manera simple. Asumo que tiene un objeto para su aplicación digamos MrBojangle, por el mío se llama Shished:
/**
* Shished singleton.
*
* @api public
*/
function Shished() {
};
Shished.prototype.getHandshakeValue = function(socket, key, handshake) {
if(!handshake) {
handshake = socket.manager.handshaken[ socket.id ];
}
return handshake.shished[ key ];
};
Shished.prototype.setHandshakeValue = function(socket, key, value, handshake) {
if(!handshake) {
handshake = socket.manager.handshaken[ socket.id ];
}
if(!handshake.shished) {
handshake.shished = {};
}
handshake.shished[ key ] = value;
};
Luego de su método de autorización, estoy usando MongoDB para el almacenamiento de sesión:
io.set('authorization', function(handshake, callback) {
self.setHandshakeValue(null, 'userId', null, handshake);
if (handshake.headers.cookie) {
var cookie = connect.utils.parseCookie(handshake.headers.cookie);
self.mongoStore()
.getStore()
.get(cookie['connect.sid'], function(err, session) {
if(!err && session && session.auth && session.auth.loggedIn) {
self.setHandshakeValue(null,
'userId',
session.auth.userId,
handshake);
}
});
}
Entonces, antes de guardar un registro en el modelo, que puede hacer:
model._author = shished.getHandshakeValue(socket, 'userId');
Lo que terminé haciendo fue darle a cada usuario un nombre de usuario para iniciar sesión y cambiarlo con bastante frecuencia, y luego usarlo en los mensajes de socket para verificar que realmente eran quienes decían que eran. – MrBojangles