Using Websocket with a passport

How can I access the passport login for the current session when someone opens a connection to WebSocket?

I found a nice express-ws project that seems to be perfectly executed

app.ws('/', function(ws, req) { ws.on('message', function(msg) { console.log('express-ws --- ', msg); }); console.log('socket', req.user); //current user == req.user }); 

But how do I get the same information with a simple connection to Websocket?

 var WebSocketServer = require('ws').Server, wss = new WebSocketServer({ port: 3001 }); wss.on('connection', function(socket){ //Where is the current user???? console.log('connection'); socket.on('message', function(message){ console.log('message received', message); }); }); 

(this second connection works very well, but for my life I can’t find a way to get the registered information from my passport)

+5
source share
2 answers

When you create your WS server, add the "verifyClient" parameter as follows to get session information:

  const wss = new (require('ws').Server)({ server, verifyClient: (info, done) => { sessionParser(info.req, {}, () => { done(info.req.session) }) } }) 

Where sessionParser is your configured express-session object. You can then access it in a web cluster through req.session . If you are using a passport, you may need req.session.passport.user ..

+2
source

Instead of using req.session.passport.user to access the authenticated user ID, you can use ws.upgradeReq.session.passport.user .

 app.ws('/', function(ws, req) { ws.on('message', function(msg) { console.log('express-ws --- ', msg); }); console.log(ws.upgradeReq.session.passport.user); /* keys can be found like for(var key in ws.upgradeReq.session.passport){ console.log(key); } */ }); 
-1
source

Source: https://habr.com/ru/post/1243947/


All Articles