【发布时间】:2017-05-29 13:27:24
【问题描述】:
我有一个 NodeWebkit 客户端,它使用 socket.io 库 (JavaScript) 连接到 nodejs 服务器。
客户端在应用程序启动时启动连接过程,但服务器没有确认任何连接......虽然客户端的套接字的连接属性为“true”。
您应该知道我正在使用 socketio-jwt 来验证连接。
Github:https://github.com/auth0/socketio-jwt
我知道这种连接在某种程度上是有效的,因为如果我添加:
io.sockets.on('connection', function(){console.log("hello");})
它打印你好!
因此,尽管以某种方式建立了连接,但似乎该事件不想对库进行身份验证部分,导致......嗯......什么都没有。
但这还不是全部!!
因为如果我重新启动应用程序(而不是服务器),那么大部分时间身份验证都可以工作!它就像一个竞争条件......但我不明白它怎么可能是一个......每个验证成功回调的代码行正在执行。
我尝试连接到远程服务器和本地主机。 我也尝试过使用其他套接字身份验证库,但我遇到了同样的问题。
这是服务器代码:
var session = require('express-session');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var socketioJwt = require('socketio-jwt');
io.sockets.on('connection', socketioJwt.authorize({
secret: 'some secret',
timeout: 15000 // 15 seconds to send the authentication message
})).on('authenticated', function (socket) {
console.log('[Info]: A user connected to socket = ', socket.decoded_token);
});
});
http.listen(5000, function () {
console.log('listening on *:5000');
});
现在是客户端代码:
this.socket = io.connect('http://' + that.hostName +':' + that.port);
var token = jwt.sign({email: "someEail", pwd: "somePwd"}, fromServerSecret);
this.socket.on('connect', function () {
that.socket.emit('authenticate', {token: token}) //send the jwt
.on('authenticated', function () {
console.log("[Info]: Socket login successfull");
})
.on('unauthorized', function (msg) {
console.log("[Warning]: Socket unauthorized: " + JSON.stringify(msg.data));
throw new Error(msg.data.type);
});
});
从不显示服务器端日志“A user connected to socket”。
如果你有一个想法!感谢您的宝贵时间。
【问题讨论】:
标签: javascript node.js socket.io jwt node-webkit