node.js - node - nuevo valor de cookie de socket.io no funciona?
socket io on message (1)
Ok, descubrí que necesito configurar este tipo de cookies desde el lado del cliente.
emitir socketClientID de io.sockets.on (''connection'', function (client) ...
O
emitir desde el cliente y devolver la llamada al socketClientID.
Utilizo https://github.com/carhartl/jquery-cookie para la gestión de cookies del cliente.
Intento usar la identificación de socket.io para múltiples ventanas / páginas del navegador. Es para SNS-auth-process utilizando everyauth , y el proyecto se basa en express .
Aquí está el diseño de mi proyecto:
Una página principal llena de ajax manteniendo una conexión socket.io. Sin recarga, sin redirección, etc.
Cuando un usuario intenta iniciar sesión a través de alguna cuenta de SNS, se abre una ventana emergente, que será administrada por everyauth y SNS Auth. Dentro de la ventana emergente, se producen muchos redireccionamientos, pero la ventana principal es persistente, por lo que la conexión de socket.io.
Finalmente, después de la autorización exitosa, everyauth redirige ''authdone.html'' en la ventana emergente.
En el navegador, esta ventana emergente ya no es útil, entonces window.close ();
pero, se puede obtener una información exitosa de inicio de sesión a lo largo de Everyauth, pero en mi caso, cookie es más importante ya que no necesito exactamente una gestión de sesión con Express Framework porque lo que pretendo hacer es gestionar sesiones a través de socket.IO .
app.get(''*'',
function (req, res)
{
console.log("----------get------------");
console.log(req.url);
if (req.url == ''/public/authdone.html'')
{
console.log("----------get /public/authdone.html------------");
console.log(req.cookies);
// express(connect) sessionID(sid) cookie available here.
//{ ''connect.sid'': ''2DLlayNx90wtTsyeq5w83N9g.Kc1ZFd8I7omf6u4fk4FFyKAt4dP1V6IufSf1ZtRudVI'' }
}
onreq(req, res);
});
Actualmente, logré obtener el ID de sesión exprés a través de una cookie en la ventana emergente redireccionada a la página de destino (/public/authdone.html), sin embargo, esto no es suficiente. También necesito obtener una ID orientada a socket.IO aquí en la cookie.
En realidad, me confundí aquí y le hice una pregunta. Agregar un valor de cookie en Socket.IO
Gracias a Wes, encontré un modo de agregar un nuevo valor de cookie (en mi caso, algún ID de cliente de socket) como se muestra a continuación:
io.configure(function ()
{
io.set(''authorization'', function (handshake, callback)
{
if (handshake.headers.cookie)
{
var cookie = handshake.headers.cookie;
var newS = ";"
+ "socketClientID" + "="
+ "999999999999999";// eventually randomize for every client
cookie += newS;
console.log("=========================================");
console.log(cookie);
} else
{
return callback(''Cookie not found'', false);
}
callback(null, true);
});
});
En este bloque, agrego un valor de cookie como "socketClientID = 999999999999999"
Entonces, la salida de cookie actual a través de console.log es
connect.sid=fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU;
socketClientID=999999999999999
Hasta ahora todo bien, sin embargo, en la página redireccionada de everyauth, sigo recibiendo
----------get /public/authdone.html------------
{ ''connect.sid'': ''fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU'' }
solo express sessionID (connect.sid) puede obtenerse a través de la cookie, se agrega el valor de cookie de clientID en el socket. La fase de saludo de la toma de poder no se refleja.
Realmente necesito ayuda. Gracias.