Quiero hacer un manejo de sesión sobre websockets a través de node.js y socket.io sin necesariamente usar cookies y evitar express.js, porque también debe haber clientes que no se ejecutan en un entorno de navegador. ¿Alguien ya hizo esto o adquirió alguna experiencia con una prueba de concepto?sesión de Socket.io sin express.js?
Respuesta
Esto debería ser útil, https://github.com/LearnBoost/socket.io/wiki/Authorizing
Se podría realizar un seguimiento de todas las variables de sesión y únicamente identificar a los usuarios que utilizan una combinación de los siguientes disponible en handshakeData
{
headers: req.headers // <Object> the headers of the request
, time: (new Date) +'' // <String> date time of the connection
, address: socket.address() // <Object> remoteAddress and remotePort object
, xdomain: !!headers.origin // <Boolean> was it a cross domain request?
, secure: socket.secure // <Boolean> https connection
, issued: +date // <Number> EPOCH of when the handshake was created
, url: request.url // <String> the entrance path of the request
, query: data.query // <Object> the result of url.parse().query or a empty object
}
Este ejemplo puede ayudar también , solo haga que sus clientes que no sean navegadores suministren la información de otra manera:
Buen punto, si puedo agregar un sessionid en req.headers en el cliente y validar esto en la autorización. Por lo tanto, tengo que escribir un manejador de sesión independiente desacoplado de la req y res vars. Tal vez podría usar connect-session como base de código para ser compatible con los almacenes de sesiones y otras cosas. ¿Sabes cómo puedo agregar valores al encabezado en el lado del cliente? Una vez que mi conexión websocket está autorizada, ¿es tan segura como una única solicitud HTTP validando su sesión todo el tiempo? –
Antes de que se establezca la conexión socket.io, existe un mecanismo de handshake, de manera predeterminada, todas las solicitudes correctamente recibidas se dan la mano con éxito. Sin embargo, existe un método para obtener datos del socket durante el intercambio de palabras y devolver verdadero o falso, dependiendo de su elección, que acepte o deniegue la solicitud de conexión entrante. Aquí hay un ejemplo de socket.io docs:
Como handshakeData se almacena después de la autorización, puede agregar o quitar datos de este objeto.
var io = require('socket.io').listen(80);
io.configure(function(){
io.set('authorization', function (handshakeData, callback) {
// findDatabyip is an async example function
findDatabyIP(handshakeData.address.address, function (err, data) {
if (err) return callback(err);
if (data.authorized) {
handshakeData.foo = 'bar';
for(var prop in data) handshakeData[prop] = data[prop];
callback(null, true);
} else {
callback(null, false);
}
})
});
});
El primer argumento de devolución de llamada función es error, puede proporcionar una cadena aquí, que se negará automáticamente el cliente si no se establece en null. El segundo argumento es booleano, ya sea que quiera aceptar la solicitud entrante o no.
- 1. node.js + express.js + autorización de socket.io: sin cookie
- 2. fusionar las sesiones de socket.io y express.js
- 3. Socket.io y datos de sesión
- 4. Sesión de sólo cookies para Express.js
- 5. socket.io independiente sin Node.js
- 6. En Express.js, ¿cómo puedo renderizar una vista parcial de Jade sin un objeto de "respuesta"?
- 7. Filtros en express.js
- 8. ¿Una explicación del soporte de sesión usando Express y Socket.IO?
- 9. socket.io parse connect (> = 2.4.1) cookie de sesión firmada
- 10. ¿Cómo renderizo los parciales con jade sin express.js? Sólo
- 11. Node.js/Express.js cookie de gestión de sesiones para ser cookie de sesión
- 12. Cómo montar sub-aplicaciones express.js?
- 13. sesiones express.js con proxy inverso
- 14. Sesión Scalatra sin cookies
- 15. Node.JS sesión sin cookies
- 16. Gancho de desconexión de Express.js
- 17. Sesión de PHP sin cookies
- 18. Express.js Ver "globales"
- 19. express.js/serve generated image
- 20. Cómo detectar conexiones socket.io múltiples del mismo usuario
- 21. Socket.io Express 3 sesiones
- 22. Iniciando sesión sin mostrar una página de inicio de sesión
- 23. Compartir una tienda de sesión en Redis para una aplicación Django y Express.js
- 24. Diseño de aplicación web: sesión o sesión sin
- 25. No se puede obtener la ID de sesión Express de las cookies con Socket.IO
- 26. ¿Dónde está la API de Express.js?
- 27. Benchmarkt socket.io
- 28. configuración socket.io
- 29. Socket.io + PhoneGap
- 30. Express.js + Less: cómo configurar correctamente
Los ejemplos en http://socket.io/ no usan expreso, pero supongo que ya lo saben. ¿Qué información adicional necesitas? –