Jak korzystać z paszportu za pomocą express i socket.io?
Obecnie próbuję skonfigurować podstawowy system uwierzytelniania dla mojej aplikacji node.js. Na razie używam express (3.0.0rc5), paszportu (0.1.12) i socket.io (0.9.10) z Mongoose as Store dla danych sesji. Bawiłem się także zeveryauth
ale nie lubiłem pracować z obietnicami.
Obecna sytuacja:
Uwierzytelnianie przez paszport (strategia na Facebooku) jest udane, asession.sid
cookie jest ustawiane na kliencie po przekierowaniu i mogę zobaczyć dokument sesji w mojej bazie danych. Mogę uzyskać dostęp do cookie sesji wsocket.io
przezsocket.handshake.headers.cookie
.
Jeśli dobrze zrozumiałem pojęcie paszportu, po udanymauthentication passport.serializeUser
jest wywoływane, co pozwala mi dodawać informacje do sesji. W moim przypadku najważniejszą informacją jest e-mail, więc ustawiłem serializator w następujący sposób:
passport.serializeUser(function(user, done) {
done(null, user.email);
});
Teraz jestem w punkcie, w którym muszę użyć tylko informacji cookie w moim zdarzeniu socket.io, aby wyodrębnić adres e-mail z sesji.
var connect = require('connect'),
parseSignedCookie = connect.utils.parseSignedCookie,
cookie = require('express/node_modules/cookie');
io.on('connection', function(socket) {
if(socket.handshake.headers.cookie) {
var cookie = cookie.parse(socket.handshake.headers.cookie);
var sessionID = parseSignedCookie(cookie['connect.sid'], 'secret');
}
});
passport.deserializeUser(function(id, done) {
// so, what is supposed to be done here?
});
Więc jeśli się nie mylę, zadanie jest teraz do wykorzystaniadeserializeUser
aby uzyskać dostęp do odpowiedniego adresu e-mail.
Jak bym to zrobił? Wszelkie wskazówki są wysoko cenione.