Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

como posso fazer com que as sessões funcionem usando redis, express &socket.io?


dentro do io.configure , você deve vincular o soquete à sessão http.

Aqui está um pedaço de código que extrai o cookie (Isso está usando socket.io com xhr-polling , não sei se isso funcionaria para websocket, embora eu suspeite que funcionaria).
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);
  }
});

Então você pode acessar a sessão usando:
socket.on("selector", function(data, reply) {
  var session = this.handshake.session;
  ...
}

Isso também tem o benefício adicional de verificar se há uma sessão válida, portanto, apenas seus usuários logados podem usar soquetes. Você pode usar uma lógica diferente, no entanto.