如何login后连接到套接字 – 智威汤逊

我正在使用socketio-jwt来validation套接字。

在服务器上:

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

在客户端:

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

我的问题是,如果一个客户端连接到服务器,authentication失败,并没有build立与套接字的连接。 现在,如果用户login到系统中,与套接字的连接仍未build立。

我试图实现的是,如果用户login到系统,连接就build立起来了。

我到目前为止唯一的想法是重新加载页面,像$window.location.href = '/'; login后。 但似乎不是正确的方法。

另一个select是保持套接字试图(重新)连接超时。 但它是一个不好的select,因为我的应用程序允许用户没有login。

如何正确触发套接字连接?

这是你的问题的解决scheme

首先在您的服务器端,您可以实现并将用户凭证绑定到token ,如下所示。

 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. 

socket.io服务器端,您可以执行以下操作

  //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 

client发送有效的jwt连接时被触发

简单的客户端文件将包含以下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 });