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