2012-08-25 11 views
8

Chcę wykonać sesję obsługi stron internetowych za pośrednictwem node.js i socket.io bez konieczności korzystania z plików cookie i unikania pliku express.js, ponieważ nie powinno być również klientów nie działających w środowisku przeglądarki. Ktoś już to zrobił lub ma jakieś doświadczenie z dowodem koncepcji?Socket.io sesja bez pliku express.js?

+0

Przykłady na stronie http://socket.io/ nie używają wyrażenia, ale domyślam się, że już to wiesz. Jakie dodatkowe informacje są potrzebne? –

Odpowiedz

1

Powinno to być pomocne, https://github.com/LearnBoost/socket.io/wiki/Authorizing

Można śledzić wszystkie zmienne sesyjne i jednoznacznej identyfikacji użytkowników za pomocą kombinacji następujących dostępny w handshakeData

{ 
    headers: req.headers  // <Object> the headers of the request 
, time: (new Date) +''  // <String> date time of the connection 
, address: socket.address() // <Object> remoteAddress and remotePort object 
, xdomain: !!headers.origin // <Boolean> was it a cross domain request? 
, secure: socket.secure  // <Boolean> https connection 
, issued: +date    // <Number> EPOCH of when the handshake was created 
, url: request.url   // <String> the entrance path of the request 
, query: data.query   // <Object> the result of url.parse().query or a empty object 
} 

Ten przykład może pomóc także Po prostu poproś klientów spoza przeglądarki o podanie informacji w inny sposób:

SocketIO + MySQL Authentication

+0

Dobrze, jeśli mogę dodać sessionid do req.headers na stronie klienta i potwierdzić to w autoryzacji. Dlatego muszę napisać samodzielny seserhandler oddzielony od req i res vars. Może mógłbym użyć sesji połączenia jako bazy kodowej, aby była kompatybilna ze sklepami sesyjnymi i innymi rzeczami. Czy wiesz, w jaki sposób mogę dodać wartości do nagłówka po stronie klienta? Kiedy moje połączenie z websocket jest autoryzowane, czy jest ono tak samo bezpieczne, jak pojedyncze żądanie http sprawdzające jego sesję przez cały czas? –

3

Przed ustanowieniem połączenia socket.io jest mechanizm handshake, domyślnie wszystkie poprawnie przychodzące żądania pomyślnie podają sobie ręce. Istnieje jednak metoda uzyskiwania danych gniazda podczas uzgadniania i zwracania wartości true lub false w zależności od tego, który z nich jest akceptowany lub odmawia przyjęcia żądania połączenia. Oto przykład z pliku socket.io:

Ponieważ dane handshakeData są przechowywane po autoryzacji, można faktycznie dodawać lub usuwać dane z tego obiektu.

var io = require('socket.io').listen(80); 

io.configure(function(){ 
    io.set('authorization', function (handshakeData, callback) { 
    // findDatabyip is an async example function 
    findDatabyIP(handshakeData.address.address, function (err, data) { 
     if (err) return callback(err); 

     if (data.authorized) { 
     handshakeData.foo = 'bar'; 
     for(var prop in data) handshakeData[prop] = data[prop]; 
     callback(null, true); 
     } else { 
     callback(null, false); 
     } 
    }) 
    }); 
}); 

Pierwszym argumentem zwrotnego funkcja jest błąd, można podać tu ciąg, który będzie automatycznie odmówić klientowi, jeśli nie jest ustawiona na null. Drugi argument to boolean, niezależnie od tego, czy chcesz przyjąć przychodzące żądanie, czy nie.

Powiązane problemy