2017-01-15 5 views
0

ソケットでnode.jsを使用していますが、セッションからユーザー名を取得するにはどうすればよいですか?Node.jsソケットセッション

私はエクスプレスとソケットのパッケージのみを使用するとこれは可能ですか?

ログインページに行くと、ユーザー名を選択できます。ログインをクリックすると、セッションでユーザー名をプッシュします。これはうまく動作します。しかし、どのように私のio.on( "接続")でこのセッションを使うことができますか?

おかげ

種類よろしくヨハン

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

socket.io-Expressのセッションライブラリ。これはsocket.ioのラッパーである非常に単純なライブラリです。それは、ハンドシェイク中にセッション情報を取得し、それをsocket.ioの接続関数に渡すことだけです。接続リスナのsocket.handshake.session経由でセッションにアクセスできます。

//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'}); 
... 
});