2016-02-26 23 views
5

Làm cách nào để truy cập thông tin đăng nhập hộ chiếu cho phiên hiện tại khi ai đó mở kết nối WebSocket?Sử dụng Websocket với Hộ chiếu

Tôi đã tìm thấy một dự án tốt đẹp express-ws mà dường như làm việc đẹp

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

Nhưng làm thế nào tôi sẽ đi về việc nhận thông tin này cùng với một kết nối WebSocket đồng bằng?

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

(kết nối thứ hai này không làm việc tốt - nhưng tôi không thể cho cuộc đời của tôi tìm mọi cách để có được đăng nhập thông tin từ Passport)

Trả lời

-1

Thay vì sử dụng req.session.passport.user để truy cập người dùng xác thực id, người ta có thể sử dụng 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); 
    } 
    */ 
}); 
+0

Vui lòng giải thích những gì đang xảy ra trong mã của bạn. Chỉ cần đăng một mẫu mã sẽ không giải thích cho OP hoặc người đọc trong tương lai những gì đã đi sai với vấn đề ban đầu, hoặc tại sao giải pháp của bạn hoạt động. – BHustus

+0

@BHustus có ổn không? – rfprod

+0

Có vẻ tốt với tôi. – BHustus

1

Khi bạn đang tạo máy chủ WS của bạn, thêm một "verifyClient" tham số như sau để lấy các thông tin session:

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

đâu sessionParserexpress-session đối tượng cấu hình của bạn. Điều này sau đó cho phép bạn truy cập nó trong websocket thông qua req.session. Nếu bạn đang sử dụng hộ chiếu, bạn có thể muốn req.session.passport.user ..

+0

Cảm ơn bạn rất nhiều, đây là câu trả lời thực sự – PaNaVTEC

Các vấn đề liên quan