登录后如何连接到套接字 - JWT
Posted
技术标签:
【中文标题】登录后如何连接到套接字 - JWT【英文标题】:How to connect to socket after login - JWT 【发布时间】:2017-01-08 09:48:52 【问题描述】:我正在使用 socketio-jwt 来验证套接字。
在服务器上:
socketio.use(require('socketio-jwt').authorize(
secret: config.secrets.session,
handshake: true
));
在客户端:
var iosocket = io('',
query: 'token=' + Auth.getToken(),
path: '/socket.io-client'
);
我的问题是,如果客户端连接到服务器,则身份验证失败,并且没有建立与套接字的连接。现在如果用户登录系统,与套接字的连接仍然没有建立。
我试图实现的是,如果用户登录系统,连接就会建立。
到目前为止,我唯一的想法是在登录后使用$window.location.href = '/';
之类的内容重新加载页面。但这似乎不是正确的方法。
另一种选择是让套接字尝试(重新)连接超时。但这是一个糟糕的选择,因为我的应用程序允许用户无需登录。
如何正确触发套接字连接?
【问题讨论】:
用户登录后为什么不触发连接? 【参考方案1】: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 );
【讨论】:
使用!0
有什么特殊原因吗?为什么不只是1
或true
?【参考方案2】:
这里是您问题的解决方案
首先在您的服务器端,您可以实现用户凭据并将其绑定到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 ))
【讨论】:
以上是关于登录后如何连接到套接字 - JWT的主要内容,如果未能解决你的问题,请参考以下文章
ECONNRESET(Nodejs net.Socket)后重新连接到套接字的正确方法