Wie benutze ich den Reisepass mit express und socket.io?

Ich versuche derzeit, ein grundlegendes Authentifizierungssystem für meine node.js-App einzurichten. Im Moment benutze ich Express (3.0.0rc5), Passport (0.1.12) und Socket.io (0.9.10) mit Mongoose als Speicher für Sitzungsdaten. Ich habe auch rumgespielteveryauth aber ich wollte nicht mit Versprechungen arbeiten.

Momentane Situation:

Die Authentifizierung über den Reisepass (Facebook-Strategie) ist erfolgreichsession.sid Nach der Umleitung wird auf dem Client ein Cookie gesetzt, und ich kann ein Sitzungsdokument in meiner Datenbank anzeigen. Ich kann auf das Sitzungscookie in zugreifensocket.io durchsocket.handshake.headers.cookie.

Wenn ich das Passkonzept richtig verstanden habe, nach erfolgreicherauthentication passport.serializeUser wird aufgerufen, wodurch ich der Sitzung Informationen hinzufügen kann. In meinem Fall ist die wichtigste Information die E-Mail, daher habe ich den Serializer folgendermaßen eingerichtet:

passport.serializeUser(function(user, done) {
  done(null, user.email);
});

Jetzt bin ich an dem Punkt angelangt, an dem ich nur noch die Cookie-Informationen in meinem socket.io-Ereignis verwenden muss, um die E-Mail-Adresse aus der Sitzung zu extrahieren.

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

Also, wenn ich mich nicht irre, ist die Aufgabe jetzt zu verwendendeserializeUser um auf die entsprechende E-Mail-Adresse zuzugreifen.

Wie würde ich das machen? Hinweise werden sehr geschätzt.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage