如何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 });