2017-06-28 59 views
1

我有以下代碼:Socket.io和認證系統

io.sockets.on('connection', function (socket) { 

    socket.on('queue', function() { 
     console.log(socket.request.headers.cookie); 

    }) 
}); 

現在註冊到我的網站是通過快遞完成,一個HTTPS的cookie被添加到快遞客戶端瀏覽器。當有人想連接到我的時候,讓我們說他需要發佈一個「隊列事件」的遊戲。在那裏,socket.io將讀取他的cookies並檢查它們是否正確。

根據這個線索: Can I access a cookie from Socket.io?

socket.request.headers.cookie 

headers.cookie是一個禁忌,即使我真的不明白爲什麼。爲什麼socket.io會將他的Cookie與其他人的實時製作混淆?我錯過了什麼?我怎樣才能做到這一點?

回答

0

如果你想用Socket.io做一些驗證,最好的方法就是使用握手。

比方說,你已經鑑別的,服務器送你回一個令牌

客戶端:

let socket = io.connect(SERVER.socket, { query: 'token=' + token }) 
     .on('connect', data => { 
      console.log('Connected to the server'); 
     }; 

服務器端運行在插座連接中間件:

const io = require('socket.io').listen(httpServer) 

// Checking for the token and handshaking with the client 
.use(require('socketio-jwt').authorize({ 
    secret: secretKey, 
    handshake: true 
})) 

// Client successfully connected (token was valid) 
.on('connection', socket => {}); 

一些很好的教程: https://auth0.com/blog/auth-with-socket-io/

希望它能以某種方式幫助你。

+0

有關「client.request.headers.cookie」的任何線索都會導致競爭情況,因爲cookie始終指向上次登錄的用戶。信息? – user1938653