我有一个NodeWebkit客户端,它使用socket.io库(JavaScript)连接到nodejs服务器。

客户端在应用程序启动时启动连接过程,但是服务器未确认任何连接...尽管客户端的套接字将connected属性设置为“ true”。

您应该知道我正在使用socketio-jwt来验证连接。
GitHub:https://github.com/auth0/socketio-jwt

我知道连接确实可以正常工作,因为如果我添加:

io.sockets.on('connection', function(){console.log("hello");})


它打印你好!

因此,似乎该事件虽然通过某种方式使连接变得不希望对库执行auth部分,但导致……嗯……没事。

但这还不是全部!
因为如果我重新启动应用程序(而不是服务器),则身份验证在大多数时间都有效!它的行为就像一种竞争条件...但是我不知道它可能是一种...每行代码都在执行身份验证成功回调的操作。

我尝试连接到远程服务器和本地主机上。
我也尝试使用套接字身份验证的其他库,但是遇到了同样的问题。

这是服务器代码:

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


从不显示服务器端日志“用户已连接到套接字”。
如果您有想法的话!谢谢你的时间。

最佳答案

为什么在socket.emit(客户端)上有一个“那个”?我认为您应该在socket.io的同一实例中处理它-使用与上述相同的“ this”

关于javascript - socket.io身份验证在第一个连接上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41647066/

10-12 00:22
查看更多