Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

338
Vistas
vincular la identificación de socket.io a la identificación del usuario sin sesiones (express, pasaporte JWT)

Estoy desarrollando API RESTful en express, con JWT y pasaporte para autorización. Quiero implementar la conexión socket.io para fines de notificación y señalización (establecimiento de sesión WebRTC). No quiero implementar la gestión de sesión estándar, no quiero tratar con cookies, pero de alguna manera tengo que poder dirigirme a un usuario en particular a través de un socket. Tengo manejo de eventos en todas mis rutas, por lo que la aplicación está al tanto de las solicitudes de autenticación y las identificaciones de usuario correspondientes. Un enfoque (probablemente) es crear un grupo de socket io con identificación de usuario, agregar un socket a este grupo y emitir allí. (Participar en el manejo de la reconexión y verificar la existencia del socket en cada solicitud posterior, eso es demasiado complicado). Supongo que debería haber un mejor enfoque. También uso Redis, así que puedo aprovechar eso en este esquema. Se agradece cualquier sugerencia, gracias

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Bueno, me las arreglé para resolver eso de esa manera.

Servidor:

 import jwt from 'jwt-simple'; //I'm using ES6/Babel module.exports = function(app) { var io = app.get('io'); //Import io any possible way, //here I do it like so because I set //app.set('io', io) in my index.js var user_id; io.on('connection', socket => { // Recieve encoded token from client, decode and find user id // To do - check againt database socket.on('auth', token => { if (token) { var decoded = jwt.decode(token, 'secret') user_id = decoded.sub socket.emit('auth', user_id); } }) // Join room proposed by client - user id string socket.on('room', room => { socket.join(room) console.log('Server joined room...', room) //emit message to user id from anywhere in the app io.sockets.in(user_id).emit('message', 'what is going on, party people?'); }) }) }

cliente:

 var token = localStorage.getItem('token'); var socket = io(); socket.on('connect', data => { socket.emit('auth', token); socket.on('auth', user_id => { socket.emit('room', user_id); }) })

Ahora, para dirigirme a un usuario específico, siempre puedo emitir a la identificación de la habitación igual a la identificación del usuario, siempre que el usuario tenga credenciales. Incluso después de actualizar el navegador.

Foto: el cliente de la izquierda tiene un token válido en localStorage, el de la derecha no

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda