0

i'am using node.js with sockets but how can i get my username out of my session?

Is this possible when i use only the packages of express and socket?

when i go to the login page i can choose a username. when i click login i push my username in a session. this works fine. But how can i use this session in my io.on("connection") ?

Thanks

Kind Regards Johan

var express = require("express");
var app = express();
var http = require("http").createServer(app);
var session = require("express-session");
var io = require("socket.io")(http);
var bodyparser = require("body-parser");


app.set("view engine","ejs");
app.use(express.static(__dirname + "/public"));
app.use(bodyparser.urlencoded(true));
app.use(session({secret: "abc"}));

var serverSocket = io.listen(8060);

var users = [];





app.get("/",function (req, res) {
    if(req.session.username === undefined)
    {
        res.render("login",{error:null});
    }
    else
    {
        res.redirect("/chat");
    }

});


app.post("/login",function (req, res) {
    var username = req.body.username;
    var index = users.indexOf(username);
    console.log(index);

        if(index === -1)
        {
            users.push(username);
            req.session.username = username;
            res.redirect("/chat");
        }
        else
        {

            res.render("login",{logedIn: true,error: "gebruiker bestaat al"});
        }
});

app.get("/chat",function (req,res) {
   if(req.session.username === undefined)
   {
       res.render("login",{error:"u moet ingelogd zijn"});
   }
   else {

       res.render("chat");
   }
});


    io.on("connection",function (socket) {
        socket.username = session.username;
        var username = socket.username;

        socket.emit("connected",{username : session.username});


        socket.on("messageSend",function (data) {

           socket.emit("messageSend",{username : username,message:data.message});
        });


        socket.on("disconnect",function () {
            socket.username = null;
            console.log("diconnected");
        });
});






var server = http.listen(8050,function () {
   console.log(server.address().port);
});

1 Answer 1

1

socket.io-express-session library. It's a very simple library that's a wrapper around socket.io. All it does is grab session information during the handshake and then pass it to socket.io's connection function. You can access session via socket.handshake.session w/in connection listener.

//instead of
io.sockets.on('connection', function (socket) {
//do pubsub here
...
})

var socketIOExpressSession = require('socket.io-express-session'); 
io.use(socketIOExpressSession(app.session)); // session support

//But with sessions.sockets.io, you'll get session info

/*
Use SessionSockets so that we can exchange (set/get) user data b/w sockets        and http sessions
Pass 'jsessionid' (custom) cookie name that we are using to make use of     Sticky sessions.
*/
var SessionSockets = require('session.socket.io');
var sessionSockets = new SessionSockets(io, sessionStore, cookieParser,     'jsessionid');

io.on('connection', function (socket) {

//get info from session
var user = socket.handshake.session.user;

//Close socket if user is not logged in
if (!user)
    socket.close();

//do pubsub
socket.emit('chat', {user: user, msg: 'logged in'});
...
});
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.