inuti io.configure
, måste du länka uttaget med http-sessionen.
Här är en bit kod som extraherar cookien (denna använder socket.io med xhr-polling
, Jag vet inte om detta skulle fungera för websocket, även om jag misstänker att det skulle fungera).
var cookie = require('cookie');
var connect = require('connect');
var sessionStore = new RedisStore({
client: redis // the redis client
});
socketio.set('authorization', function(data, cb) {
if (data.headers.cookie) {
var sessionCookie = cookie.parse(data.headers.cookie);
var sessionID = connect.utils.parseSignedCookie(sessionCookie['connect.sid'], secret);
sessionStore.get(sessionID, function(err, session) {
if (err || !session) {
cb('Error', false);
} else {
data.session = session;
data.sessionID = sessionID;
cb(null, true);
}
});
} else {
cb('No cookie', false);
}
});
Sedan kan du komma åt sessionen med:
socket.on("selector", function(data, reply) {
var session = this.handshake.session;
...
}
Detta har också den extra fördelen att det kontrollerar att det finns en giltig session, så att endast dina inloggade användare kan använda sockets. Du kan dock använda en annan logik.