online jsonwebtoken desencriptar decoded create node.js sockets socket.io jwt

node.js - jsonwebtoken - Cómo conectarse al socket después de iniciar sesión-JWT



jwt php (2)

Estoy usando socketio-jwt para autenticar enchufes.

En el servidor:

socketio.use(require(''socketio-jwt'').authorize({ secret: config.secrets.session, handshake: true }));

En el cliente:

var ioSocket = io('''', { query: ''token='' + Auth.getToken(), path: ''/socket.io-client'' });

Mi problema es que si un cliente se conecta al servidor, la autenticación falla y no se establece ninguna conexión con el socket. Ahora, si el usuario inicia sesión en el sistema, la conexión con el socket no se establece.

Lo que intento lograr es que si un usuario inicia sesión en el sistema, la conexión se establece.

Mi única idea hasta ahora es volver a cargar la página con algo como $window.location.href = ''/''; después de iniciar sesión. Pero parece que no es la forma correcta.

Otra opción sería mantener el socket tratando de (re) conectarse con un tiempo de espera. Pero es una mala opción, ya que mi aplicación permite a los usuarios sin iniciar sesión.

¿Cómo activar correctamente una conexión de socket?


Aquí está la solución a su problema

En primer lugar, en su lado del servidor puede implementar y vincular las credenciales del usuario a un token como se muestra a continuación.

var jwt = require(''jsonwebtoken''); app.post(''/loginpage'',function(req,res){ //validate the user here }); //generate the token of the user based upon the credentials var server = //create the http server here.

En el lado del servidor socket.io puedes hacer lo siguiente

//require socket.io var xxx = socketIo.listen //to the server xxx.set(''auth'',socketIojwtauthorize({ secret: config.secrets.session, handshake: true })); xxx.sockets //here connection on or off by setting up promise //server listen to localhost and port of your choice

Cuando el client envía una conexión jwt válida se activa

El archivo simple del lado del cliente contendría los siguientes modules

//function connectsocket(token){ //connect( //and query the token ); } //socket.on(''connect'',function(){ //generate the success message here }).on(''disconnect'',function(){ //your choice }) //rendering the routes with the server side $.post(''/loginroute'',{ //user credentials passes here }).done(function(bind){ connect_socket( bind.token )})


var socket = require(''socket.io''); var express = require(''express''); var http = require(''http''); var app = express(); var server = http.createServer(app); var io = socket.listen(server); io.on(''connection'', function (client) { // here server side code }) server.listen(5000); on client side include node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js socket = io.connect(site_url + ":5000", { reconnect: !0 });