2012-07-27 12 views
12

imzalı (2012-07-26 itibariyle), ben socket.io gelen bir oturum kimliği almak için aşağıdaki yolu buldum Bu bağlantı redis mağazası ile çalışacaktır. express (bağlayın bağlantı bir yardımcı program ve çerez modülünden) den çok ithal etmek Having(> = 2.4.1) bağlamak ayrıştırmak socket.io bağlantı en son sürümü ile oturum tanımlama

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 daha sonra böyle

olarak kullanılabilir

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

almanın aşırı dolambaçlı bir yol gibi görünüyor bağlanan imzalı çerezleri ayrıştırmak için gerekli işlevler. Başka bir yol bulamadı mı?

+2

bkz nasıl çalıştığı konusunda daha fazla ayrıntı için

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 }); 

. Çözümünüz beni çok fazla zaman kazandı, yayınladığınız için teşekkürler! Üzgünüm, başka bir şey öneremem. – LDK

cevap

6

Aynı yere koşuyordum ve sadece soyutlamak için küçük bir modül yazdım. Kullanım şekli nasıl görünüyor. Bu yazılı ve test edilmiş ekspres kullanarak 3 öylesine bağlantı 2.4.x sürümüne sahip sorunsuz çalışır edildi Lütfen başka türlü haber ver. ben bu 100+ kez upvote isterdim https://github.com/wcamarao/session.socket.io

İlgili konular