Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

334
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!