2017-06-28 14 views
1

私は次のコードを持っている:私のウェブサイトへ今すぐSocket.ioと認証システム

io.sockets.on('connection', function (socket) { 

    socket.on('queue', function() { 
     console.log(socket.request.headers.cookie); 

    }) 
}); 

を登録は速達で行われ、httpsのクッキーは、速達でクライアントのブラウザに追加されます。誰かが私に接続したいと思ったら、ゲームを "キューイベント"を出す必要があるとしましょう。そこに、socket.ioは彼のクッキーを読んで、それが正しいかどうかチェックします。このスレッドによると

Can I access a cookie from Socket.io?

socket.request.headers.cookie 

headers.cookieは、私は本当に理由を理解していないにも関わらず、ノーノーではありません。なぜsocket.ioは彼のクッキーを他の誰かとリアルタイム生産で混同しますか?私は何が欠けていますか?どうすればこの権利を行えますか?

答えて

0

Socket.ioで何らかの認証が必要な場合は、ハンドシェイクを使用するのが最善の方法です。

あなたはすでにauthentifiedしていると、サーバーが

トークンクライアント側送り返さ言ってみましょう:

let socket = io.connect(SERVER.socket, { query: 'token=' + token }) 
     .on('connect', data => { 
      console.log('Connected to the server'); 
     }; 

サーバー側がソケット接続上でミドルウェアを実行している:

const io = require('socket.io').listen(httpServer) 

// Checking for the token and handshaking with the client 
.use(require('socketio-jwt').authorize({ 
    secret: secretKey, 
    handshake: true 
})) 

// Client successfully connected (token was valid) 
.on('connection', socket => {}); 

それに関するいくつかの良いチュートリアル: https://auth0.com/blog/auth-with-socket-io/

何とかお手伝いしますように。

+0

"client.request.headers.cookie"に関するヒントは、Cookieが常に最後にログインしたユーザーを指し示すため、競合状態につながります。メッセージ? – user1938653

関連する問題