Mit der neuesten Version von connect (Stand 2012-07-26) habe ich den folgenden Weg gefunden, um eine Session-ID von socket.io zu erhalten das funktioniert mit einem Connect-Redis-Speicher.socket.io parse connect (> = 2.4.1) signiertes Session-Cookie
var express = require('express')
, routes = require('./routes')
, fs = require('fs')
, http = require('http')
, io = require('socket.io')
, redis = require('connect-redis')
, connect = require('express/node_modules/connect')
, parseSignedCookie = connect.utils.parseSignedCookie
, cookie = require('express/node_modules/cookie');
var secret = '...';
var rStore = new(require('connect-redis')(express));
//...
var server = http.createServer(app);
var sio = io.listen(server);
sio.set('authorization', function(data, accept) {
if(data.headers.cookie) {
data.cookie = cookie.parse(data.headers.cookie);
data.sessionID = parseSignedCookie(data.cookie['connect.sid'], secret);
} else {
return accept('No cookie transmitted', false);
}
accept(null, true);
});
data.sessionID
dann als
sio.sockets.on('connection', function(socket) {
console.log('New socket connection with ID: ' + socket.handshake.sessionID);
rStore.get(socket.handshake.sessionID, function(err, session) {
//...
});
});
so viele von Express importieren zu müssen (eine Verbindung, ein Dienstprogramm von connect, und dem Cookie-Modul) scheint wie ein zu Umwegen zu bekommen die Funktionen, die benötigt werden, um die signierten Cookies von connect zu analysieren. Hat jemand einen anderen Weg gefunden?
ich sehen wünschte, ich könnte dieses über 100-mal upvote. Ihre obige Lösung hat mir viel Zeit gespart, danke, dass Sie es gepostet haben! Es tut mir leid, dass ich keinen anderen Weg vorschlagen kann. – LDK