Con la última versión de connect (desde 2012-07-26), he encontrado la siguiente manera para obtener una ID de sesión de socket.io eso funcionará con una tienda connect-redis.socket.io parse connect (> = 2.4.1) cookie de sesión firmada
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
continuación, se puede utilizar más adelante como
sio.sockets.on('connection', function(socket) {
console.log('New socket connection with ID: ' + socket.handshake.sessionID);
rStore.get(socket.handshake.sessionID, function(err, session) {
//...
});
});
tener que importar muchos de expreso (conectar, una utilidad de conexión, y el módulo de galletas) parece una forma excesivamente rotonda de conseguir las funciones necesarias para analizar las cookies firmadas de connect. ¿Alguien ha encontrado otra manera?
Me gustaría poder upvote esta más de 100 veces. Su solución anterior me ha ahorrado mucho tiempo, ¡gracias por publicarla! Lo siento, no puedo sugerir otra manera. – LDK