2016-02-26 10 views
5

Wie greife ich auf die Passanmeldung für die aktuelle Sitzung zu, wenn jemand eine WebSocket-Verbindung öffnet?Verwenden von Websocket mit Passport

Ich habe ein schönes Projekt express-ws die schön

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

Aber wie würde ich mit einer einfachen Websocket Verbindung zur Arbeit gehen scheint finde diese gleichen Informationen zu bekommen?

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); 
    }); 
}); 

(diese zweite Verbindung funktioniert ganz gut - aber ich kann für das Leben von mir keinen Weg finden, die in Info von Passport angemeldet zu erhalten)

Antwort

-1

Statt req.session.passport.user der Verwendung von authentifizierten Benutzern für den Zugriff auf ID, kann man ws.upgradeReq.session.passport.user verwenden.

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); 
    } 
    */ 
}); 
+0

Bitte erklären Sie, was in Ihrem Code vor sich geht. Wenn Sie nur ein Codebeispiel posten, wird dem OP oder zukünftigen Lesern nicht erklärt, was mit dem ursprünglichen Problem nicht funktioniert hat oder warum Ihre Lösung funktioniert. – BHustus

+0

@BHustus ist es jetzt in Ordnung? – rfprod

+0

Sieht gut aus für mich. – BHustus

1

Wenn Sie Ihren WS-Server erstellen, fügen Sie ein "verifyClient" Parameter wie folgt die Sitzungsinformationen zu greifen:

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

Wo sessionParser Ihr express-session konfiguriert Objekt ist. Dies ermöglicht Ihnen dann den Zugriff innerhalb des Websockets über req.session. Wenn Sie einen Reisepass verwenden, möchten Sie vielleicht req.session.passport.user ..

+0

Vielen Dank, das ist die echte Antwort – PaNaVTEC