2017-11-18 9 views
0

Nach einer erfolgreichen Authentifizierung eines Benutzers, dann ist es die Sitzungsdaten in einem Zugriffstoken codiert und dann der folgende Code verwendet wird, um das Cookie zu setzen:Express und Socket.IO geteilt Cookies

res.set('Set-Cookie', cookie.serialize('access_token', token, { 
    httpOnly: true, 
    maxAge: 60 * 60 * 24 * 7 // 1 week 
})); 

Später wurde die Benutzer versucht, eine Verbindung herzustellen socket.io und der Server versucht, den Cookie-Daten abzurufen:

io.on('connection', function(socket) { 
    console.log("SOCKET CONNECTED"); 
    console.log(socket.handshake.headers.cookie); 
    console.log(socket.request.headers.cookie); 
}); 

Ausgabe

SOCKET CONNECTED 
io=Y8-CmNDnIH1eOx0_AAAA 
io=Y8-CmNDnIH1eOx0_AAAA 

Wie Sie sehen, enthält das Cookie nur eine Eigenschaft mit dem Namen io, aber nicht access_token. Wenn die Cookies jedoch auf ausdrückliche Anfrage gelesen werden, enthalten sie das Token und die Werte sind korrekt.

Warum sind die Cookie-Header, die auf ausdrückliche Anfrage gesetzt sind, anders als die auf socket.io. Wie teile ich Cookies zwischen socket.io und express?

+0

Sind Sie 100% sicher, dass der Cookie gesetzt wurde, bevor die socket.io-Verbindung erstellt wurde? Siehst du den Cookie bei anderen ausdrücklichen Anfragen, um zu beweisen, dass er da ist? – jfriend00

+1

FYI, Sie können 'res.cookie()' verwenden, um den Cookie zu setzen, da dieser in Express eingebaut ist. – jfriend00

+0

Denken Sie daran, dass 'socket.handshake.headers.cookie' eine Momentaufnahme der Cookies zu dem Zeitpunkt ist, an dem die Verbindung socket.io ursprünglich hergestellt wurde. Es ist nicht der aktuelle Wert der Cookies, den eine neue http-Anfrage sehen würde. Daher muss Ihr Cookie gesetzt werden, bevor die socket.io Verbindung hergestellt wird, um sie dort zu sehen. – jfriend00

Antwort

1

Damit die socket.io-Verbindung Ihren Cookie sehen kann, müssen Sie die socket.io-Verbindung vom Client zu genau demselben Hostnamen und Port (gleicher Ursprung) wie der, auf den Sie den Cookie setzen, vornehmen. Der Browser sendet nur zuvor gespeicherte Cookies an genau den gleichen Ursprung, auf den sie gesetzt wurden. Beispielsweise können Sie eine IP-Adresse nicht an einem Ort und nicht an einem anderen Ort verwenden, auch wenn sie auf demselben physischen Server aufgelöst werden.

Verwandte Themen