2012-07-27 4 views
12

最新のバージョンのconnect(2012-07-26現在)では、以下の方法でsocket.ioからセッションIDを取得していますそれは接続redisストアで動作します。socket.io parse connect(> = 2.4.1)signed session cookie

var express = require('express') 
, routes = require('./routes') 
, fs = require('fs') 
, http = require('http') 
, io = require('socket.io') 
, redis = require('connect-redis') 
, connect = require('express/node_modules/connect') 
, parseSignedCookie = connect.utils.parseSignedCookie 
, cookie = require('express/node_modules/cookie'); 

var secret = '...'; 
var rStore = new(require('connect-redis')(express)); 

//... 

var server = http.createServer(app); 
var sio = io.listen(server); 

sio.set('authorization', function(data, accept) { 
    if(data.headers.cookie) { 
     data.cookie = cookie.parse(data.headers.cookie); 
     data.sessionID = parseSignedCookie(data.cookie['connect.sid'], secret); 
    } else { 
     return accept('No cookie transmitted', false); 
    } 
    accept(null, true); 
}); 

data.sessionIDは、次いで(接続の有用性を接続し、クッキーモジュール)Expressから非常に多くをインポートする必要が後でよう

sio.sockets.on('connection', function(socket) { 
    console.log('New socket connection with ID: ' + socket.handshake.sessionID); 
    rStore.get(socket.handshake.sessionID, function(err, session) { 
     //... 
    }); 
}); 

として使用することができる取得の過度迂回方法のように思えます接続された署名付きのCookieを解析するために必要な関数誰か別の方法を見つけましたか?

+2

を参照してくださいどのように動作するかの詳細について

var SessionSockets = require('session.socket.io') , sessionSockets = new SessionSockets(io, sessionStore, cookieParser); sessionSockets.on('connection', function (err, socket, session) { //your regular socket.io code goes here }); 

。上記のあなたの解決策は私に多くの時間を救った、それを投稿してくれてありがとう!すみません、私は別の方法を提案できません。 – LDK

答えて

6

私は同じものに走っていて、それを抽象化するための小さなモジュールを書きました。使用方法は次のとおりです。それは速達3を使用して書かれテストされたので、2.4.xの接続でうまく動作するはずです。私にそうでなければ教えてください。それは私が、私はこの100+回upvoteことがしたいhttps://github.com/wcamarao/session.socket.io

関連する問題