繁体   English   中英

socket.io authentification不能在第一次连接时工作

[英]socket.io authentification not working on first connection

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

客户端在应用程序启动时启动连接过程,但服务器不会确认任何连接...虽然客户端的套接字的连接属性为“true”。

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

我知道连接确实有效,因为如果我添加:

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

打印你好!

所以似乎事件虽然连接以某种方式使它不想与库做auth部分,导致......嗯......没什么。

但那还不是全部!!
因为如果我重新启动应用程序(而不是服务器),那么auth大部分时间都可以工作! 它就像一个竞争条件...但我不知道它怎么可能是一个......每一行代码都是在执行成功回调的过程中执行的。

我尝试连接到远程服务器和我的localhost。 我也尝试过使用socket 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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM