2011-07-25 1 views
10

したがって、私はこの問題をexpressでsocket.ioを使用しています。私はそれがかなり自己説明的だと思う。私は単にセッションを取得し、パラメータデータをsocket.ioに要求するだけです。一部の部屋がプライベートになるため、これはクライアント側では実行できません。どんな解決策ですか?socket.ioでnode.jsを使用してリクエストデータをどのように取得して表現しますか?

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

    socket.on('send message', function(data) { 
    NEED USER ID STORED IN session.user 
    } 
}) 

app.get('/:roomid', function (req, res) { 
    //req.session.user = THE USER ID 
    //req.params.roomid = THE ROOM ID 
}) 

答えて

5

Socket.IO 0.7.7は〜これは、我々はクライアントが初期ハンドシェイクリクエストのない時に収集データであるhandshakeと呼ばれるソケットに新しいプロパティを導入します。それはヘッダー、IPといくつかの他のものを含んでいます。

このウィキhttps://github.com/LearnBoost/socket.io/wiki/Authorizingは軽く対象に触れます。

+0

しかし、私は部屋に入るためにsocket.ioにroomid要求をどうやってもらえますか? –

+0

セッションストアには、セッションIDを引数として取る 'get'メソッドがあるので、セッションIDをクッキーヘッダから取得してsessionStoreに渡すことができます。 しかし、これはストアを手動で初期化し、オプションで指定する必要があります。 var store = new express.MemoryStore; express.session({store:store}); とsocket.ioよりもstore.get( 'sessionid'、function(err、data){//ここでセッションにアクセスします}); – 3rdEden

+5

少なくとも私のNodeJSでは、 "ハンドシェイク"にsocket.ioへの呼び出しのクエリパラメータが含まれています: '... "url": "/ socket.io/1/?t=1355054837418" ... "たとえば、「id」パラメータを取得するために、「referer」からクエリ文字列パラメータを取得する必要がありました。url.parse(socket.handshake.headers.referer、true).query.id –

関連する問題