sql >> Database >  >> NoSQL >> Redis

hoe krijg ik sessies werkend met redis, express &socket.io?

binnen de io.configure , moet je de socket koppelen aan de http-sessie.

Hier is een stukje code dat de cookie extraheert (Dit gebruikt socket.io met xhr-polling , ik weet niet of dit zou werken voor websocket, hoewel ik vermoed dat het zou werken).

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);
  }
});

Vervolgens kunt u de sessie openen met:

socket.on("selector", function(data, reply) {
  var session = this.handshake.session;
  ...
}

Dit heeft ook als bijkomend voordeel dat het controleert of er een geldige sessie is, zodat alleen uw ingelogde gebruikers sockets kunnen gebruiken. U kunt echter een andere logica gebruiken.



  1. Hoe de functie aan te roepen na voltooiing van asynchrone functies in de lus?

  2. MongoDB 3.2 authenticatie mislukt

  3. Vind de totale tijd besteed door een gebruiker in mongoDB

  4. MongoDB SSL met zelfondertekende certificaten in C#