¿Cómo usar el pasaporte con express y socket.io?

Actualmente estoy intentando configurar un sistema de autenticación básico para mi aplicación node.js. Por ahora estoy usando Express (3.0.0rc5), pasaporte (0.1.12) y socket.io (0.9.10) con Mongoose como almacén para datos de sesión. También he estado jugando coneveryauth Pero no me gustaba trabajar con promesas.

Situación actual:

La autenticación a través del pasaporte (estrategia de facebook) es exitosa, unsession.sid la cookie se configura en el cliente después de la redirección y puedo ver un documento de sesión en mi base de datos. Puedo acceder a la cookie de sesión ensocket.io mediantesocket.handshake.headers.cookie.

Si entendí el concepto de pasaporte correctamente, después de éxitoauthentication passport.serializeUser Se llama lo que me permite agregar información a la sesión. En mi caso, la información más importante es el correo electrónico, así que configuro el serializador de la siguiente manera:

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

Ahora estoy en el punto en el que tengo que usar solo la información de las cookies en mi evento socket.io para extraer la dirección de correo electrónico de la sesión.

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

Así que si no me equivoco, la tarea ahora es usardeserializeUser Para acceder a la dirección de correo electrónico correspondiente.

¿Como podría hacerlo? Cualquier punteros son muy apreciados.

Respuestas a la pregunta(3)

Su respuesta a la pregunta