0

I've been trying to share an express session to use from socket.io for the past couple of days and I just can't wrap my head around it. I'm using express 4.11.1 with socket.io 1.3.2 (other dependencies are express-session 1.10.1, cookie-parser 1.3.3 and body-parser 1.10.2). I'm basically putting clients data into a session from express and want to use that information in socket.io because sockets loose information on reconnection. What I've done is basically what is done here but it just doesn't work for me.

var express = require('express'),
    app = express(),
    session = require('express-session'),
    cookieParser = require('cookie-parser'),
    sessionStore = new session.MemoryStore(),
    bodyParser = require('body-parser');
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;

var sessionMiddleware = session({
  name: 'sid',
  store: sessionStore, // MemoryStore
  secret: 's3cr37',
  saveUninitialized: true,
  resave: true,
});

io.use(function(socket, next) {
  sessionMiddleware(socket.request, socket.request.res, next);
});

app.use(sessionMiddleware);
app.use(bodyParser.json())

server.listen(port, function() {
  console.log('Server listening at port %d', port);
});

app.post('/login', function(req, res){  
  //just storing the info in session
  req.session.username = req.body.user;
  ...
});

io.on('connection', function(socket) {
  //using socket.request.session.username which doesn't work
  ...
});

Any help would be highly appreciated

Community
  • 1
  • 1
Neman
  • 369
  • 1
  • 6
  • 16

1 Answers1

0

So, after a lot of messing with this I figured out how to obtain the value from the session in socket. Instead of accessing the value of a session like this:

socket.request.session.username

I needed to do this:

var getUsernameFromSession = function(socket) {
  var sessionId = socket.request.sessionID;
  var cookie = JSON.parse(socket.request.sessionStore.sessions[sessionId]);
  return cookie.username;
};

I'm not sure how good this is but this works for me.

Neman
  • 369
  • 1
  • 6
  • 16