wewnątrz io.configure
, musisz połączyć gniazdo z sesją http.
Oto fragment kodu, który wyodrębnia plik cookie (używa się to przy użyciu socket.io z xhr-polling
, nie wiem, czy to zadziała dla websocket, chociaż podejrzewam, że zadziała).
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);
}
});
Następnie możesz uzyskać dostęp do sesji za pomocą:
socket.on("selector", function(data, reply) {
var session = this.handshake.session;
...
}
Ma to również tę dodatkową zaletę, że sprawdza, czy istnieje poprawna sesja, więc tylko zalogowani użytkownicy mogą korzystać z gniazd. Możesz jednak użyć innej logiki.