2011-07-25 12 views
10

Mam ten problem używając express z socket.io. Myślę, że jest to dość samo wyjaśniające; Po prostu potrzebuję uzyskać sesję i zażądać danych parametrów do pliku socket.io. Nie można tego zrobić po stronie klienta, ponieważ niektóre pokoje będą prywatne. Jakieś rozwiązania?Jak uzyskać dane żądania za pomocą pliku socket.io z plikiem node.js i wyrazić?

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

Odpowiedz

5

Socket.IO 0.7.7 ~ wprowadza nową usługę o nazwie gniazda handshake to dane, które zbieramy, gdy klient nie jest to pierwszy wniosek handshake. Zawiera nagłówki, ip i kilka innych rzeczy.

To wiki https://github.com/LearnBoost/socket.io/wiki/Authorizing dotyka lekko przedmiotu.

+0

Nadal jednak, jak mogę uzyskać żądanie roomid do socket.io, aby dołączyć do pokoju? –

+0

Magazyn sesji ma metodę 'get', która pobiera argument sessiond id jako, więc możesz pobrać identyfikator sessionid z nagłówków plików cookie i podać go w magazynie sessionStore. Ale to wymaga ręcznego zainicjowania magazynu i podania go w opcjach: var store = new express.MemoryStore; express.session ({sklep: sklep}); , a następnie w socket.io możesz zrobić store.get ("sessionid", funkcja (err, data) {// dostęp do twojej sesji tutaj}); – 3rdEden

+5

Przynajmniej na moim NodeJS, "handshake" zawiera parametry zapytania połączenia do socket.io: "..." url ":"/socket.io/1/?t=1355054837418 "...", więc Musiałem pobrać parametry ciągu zapytań z "referer", na przykład, aby uzyskać "id" param: url.parse (socket.handshake.headers.referer, true) .query.id –

Powiązane problemy