私はsocket.ioライブラリ(JavaScript)を使用してnodejsサーバに接続するNodeWebkitクライアントを持っています。socket.io認証が最初の接続で動作しない
クライアントは、アプリケーションの起動時に接続の手順を起動しますが、クライアントのソケットが「真」に接続されている属性がありますが、サーバーは...任意の接続をacknoledgeしません。
私はsocketio-jwtを使用して接続を認証していることを知っておく必要があります。
のGithub:
io.sockets.on('connection', function(){console.log("hello");})
をそれはハロー出力しますhttps://github.com/auth0/socketio-jwt
私が追加した場合ので、接続が途中で作業を行うことを知っています!
接続は何とかそれはまあ...何も...その結果、ルライブラリと認証部分をやりたくないん作られてもだから、そのイベントです。
しかし、それだけではありません。
私はアプリを再起動すると(サーバーではない)、認証はほとんどの場合動作します。それは競合状態のように振る舞います...しかし、私はそれがおそらく1つになる可能性があるのを見ていません...コードのすべての行が認証の成功コールバックのappartを実行してgetingです。
リモートサーバーとローカルホストに接続しようとしました。 私はソケット認証の他のライブラリを試しましたが、私は同じ問題を抱えています。
は、これは、サーバーのコードです:
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);
});
});
サーバー側のログ「ソケットに接続しているユーザは、」示されることはありません。
idearがある場合!御時間ありがとうございます。
あなたの答えをありがとう。上のコードに表示されていない関数の最初の行は "var that = this"です。関数のスコープを最初に保存します。したがって、最初のレベルでは、これがルートスコープであるため、「this」を使用できます。次に、私は ".on"のコールバックにあり、スコープはコールバックのスコープです。だから私は最初に "that"にスコープを保存しました。ソケットがまだ "それ"で使えるかどうかを確認しましたが、それはあります。私が言っていることは、すべて「今」と「それ」の後でまだ意味をなさないことを願っています。 ;-) – Doctor
それは理にかなっています。それでは、クライアント側と同じように、チェーンを張るのではなく、サーバー側のソケットを入れ子にしてみてください。 –