autorización de node.js+express.js+socket.io: sin cookies
socket io node js express (4)
Tengo problemas para obtener los datos de "cookies" de mi autorización de socket.io.
io.configure(function() {
io.set(''authorization'', function (data, cb) {
console.log(data);
// data.headers.cookie <-- should be the cookie
});
});
Entonces, lo que imprime es:
{ headers:
{ host: ''frisr.dk:1000'',
connection: ''keep-alive'',
origin: ''http://frisr.dk'',
''user-agent'': ''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2'',
accept: ''*/*'',
referer: ''http://frisr.dk/'',
''accept-encoding'': ''gzip,deflate,sdch'',
''accept-language'': ''da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4'',
''accept-charset'': ''ISO-8859-1,utf-8;q=0.7,*;q=0.3'' },
address: { address: ''80.71.135.24'', port: 53549 },
time: ''Sun Nov 06 2011 22:34:12 GMT+0000 (UTC)'',
query: { t: ''1320610986125'' },
url: ''/socket.io/1/?t=1320610986125'',
xdomain: true,
secure: undefined,
issued: 1320618852796 }
puedes consultar el código aquí: http://frisr.dk
¿Por qué la cookie no está disponible?
¿Echa un vistazo, no hay ningún encabezado de "cookie", algo así como
cookie: sid=whatsoever
Supongo que algo está mal en el archivo de configuración de tu app.js. Si no creó su aplicación con el comando $ express --sessions myApp
en la carpeta raíz de la aplicación, no tendrá ninguna cookie en los encabezados.
Para asegurarse de que tiene cookies, intente ver su configuración de app.js:
app.configure(function(){
app.set(''port'', process.env.PORT || 8080);
app.set(''views'', __dirname + ''/views'');
app.set(''view engine'', ''jade'');
app.use(express.favicon());
app.use(express.logger(''dev''));
app.use(express.bodyParser());
app.use(express.methodOverride());
//this snippet here
app.use(express.cookieParser(''your secret here''));
app.use(express.session());
//end of snippet
app.use(app.router);
app.use(require(''less-middleware'')({ src: __dirname + ''/public'' }));
app.use(express.static(path.join(__dirname, ''public'')));
});
La cookie no se establece durante la solicitud de protocolo de enlace. Probablemente, la cookie ya está configurada para diferentes servidores / dominios y es por eso que en su segundo servidor existe en su objeto de datos. Verifique si se está estableciendo la cookie para este dominio en firebug ot smth.
Echa un vistazo a tu anfitrión. ¿A qué se está conectando su cliente? Estaba teniendo un problema con expressjs 3. * y Socket.io también, pero estaba enviando a mi cliente a conectarse como:
io.connect(127.0.0.1);
En lugar de
io.connect(''localhost'');
Ahora, hackear juntos la nueva y encantadora rutina de análisis sintáctico.
https://groups.google.com/forum/?fromgroups=#!topic/express-js/II3eIM9HHQY
Eche un vistazo a esta pregunta sobre socket.io y autenticación. En realidad, realmente hay un montón de preguntas sobre este tema :)