2016-02-26 26 views
5

當有人打開WebSocket連接時,如何訪問當前會話的護照登錄?使用帶護照的Websocket

我找到了一個很好的項目express-ws這似乎是做工精美

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

但我將如何去獲得同樣的信息用普通的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); 
    }); 
}); 

(第二個連接不工作得很好 - 但我不能爲我的生活找到任何方式來獲得在信息記錄的從Passport)

回答

-1

而不是使用req.session.passport.user訪問身份驗證的用戶ID,可以使用ws.upgradeReq.session.passport.user

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

哪裏sessionParser是您express-session配置的對象:

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

請解釋您的代碼中發生了什麼。只是發佈代碼示例不會向OP或未來的讀者解釋原始問題出了什麼問題,或者解決方案的原因。 – BHustus

+0

@BHustus現在好嗎? – rfprod

+0

對我很好。 – BHustus

1

當你創建你的WS服務器,如下搶會話信息添加「verifyClient」參數。這允許您通過req.session在websocket中訪問它。如果您使用護照,您可能需要req.session.passport.user ..

+0

非常感謝,這是真正的答案 – PaNaVTEC