0

I am making a chat for customers of a web page, with express.js, and socket.io, and I'm trying to manage sessions with express-session, my problem is, how do I read the session values on the socket. Here's part of my code.

Thanks for the help :)

var express         = require('express');
var app             = express();
var http            = require('http').Server(app);
var io              = require('socket.io')(http);
var bodyParser      = require('body-parser');
var session         = require('express-session');
var shortid         = require('shortid');

app.use(express.static('public'));
app.use( session({
        secret: 'dont move',
        resave: true,
        saveUninitialized: true
    })
);
app.use( bodyParser.urlencoded({ extended: true }) );
app.post('/chat', function(req, res){
        var sess = req.session;
        sess.ssid = shortid.generate();
        res.render('chat', { name: "name" });
});
io.on('connection', function(socket){
    socket.on('chat message', function( data ){
        if( data.msg.trim() != '' ){
            console.log('message: ' + data.msg);
            //Here I want to read the ssid session var, so I can manage many chats at the same time
        }
    });
    socket.on('disconnect', function(){
        console.log('Hey, someone disconected!');
    });
});
http.listen(3000, function(){
    console.log('listening on *:3000');
});

1 Answers1

0

You can configure socket authorization

var express         = require('express');
var app             = express();
var http            = require('http').Server(app);
var io              = require('socket.io')(http);
var bodyParser      = require('body-parser');
var session         = require('express-session');
var shortid         = require('shortid');

app.use(express.static('public'));
app.use( session({
        secret: 'dont move',
        resave: true,
        saveUninitialized: true
    })
);
app.use( bodyParser.urlencoded({ extended: true }) );
app.post('/chat', function(req, res){
        var sess = req.session;
        sess.ssid = shortid.generate();
        res.render('chat', { name: "name" });
});

var util = require('util';
var connect = require('connect');
var parseSignedCookie = connect.utils.parseSignedCookie;

io.configure(function () {
  io.set('authorization', function (data, callback) {
    if(data.headers.cookie) {
      data.cookie = cookie.parse(data.headers.cookie);
      data.sessionId = parseSignedCookie(data.cookie['ssid'], 'dont move');
    }
    callback(null, true);
  });

  io.on('connection', function(socket) {
    var sessionId    = socket.handshake.sessionId;
    socket.on('chat message', function( data ){
        if( data.msg.trim() != '' ){
            console.log('message: ' + data.msg);
            // NOW YOU CAN USE `sessionId`
        }
    });
    socket.on('disconnect', function(){
        console.log('Hey, someone disconected!');
    });
  });
});

http.listen(3000, function(){
    console.log('listening on *:3000');
});
greenlikeorange
  • 505
  • 3
  • 10
  • I am getting an error, this means I should declare the method or something? or am I using the wrong lib? var parseSignedCookie = connect.utils.parseSignedCookie; ^ TypeError: Cannot read property 'parseSignedCookie' of undefined at Object. (/index.js:50:38) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) at node.js:814:3 – Angel Romero Herrera Jul 23 '15 at 22:47