¿Por qué lo pedí? ¿El usuario siempre está vacío en el momento de la carga?

Descripción de los antecedentes

he estado luchando durante días y he hecho algunos buenos progresos, pero no puedo hacer que el contenido de mi curso funcione correctamente.
He utilizado con éxito el pasaporte para autenticar en facebook. Cuando hago clic en mi botón de inicio de sesión FB, la sesión se carga perfectamente y tengo mi solicitud. Los objetos de usuario están listos, pero en mi opinión, sólo tengo que hacerlo una vez.
Sé que el pasaporte puede guardar galletas. Lo comprobé y encontré que funcionaba.
Traté de comprobar si el usuario ya estaba conectado cuando cargué mi página de índice, pero cuando cargué la página, la solicitud fue borrada. El objeto de usuario siempre está vacío, mi pasaporte está vacío. El método de usuario de deserialización nunca se llama para cargarlo (si hago clic en el botón log into FB, se llama).
¿Así que mi pregunta es, cómo puedo hacer que el pasaporte en la página de carga compruebe la Cookie y cargue la sesión de usuario, si la hay?
Actualización - Bueno, para aquellos que lo descubren más tarde, sólo quiero revisar lo que he aprendido aquí (gracias por sus comentarios). Espero que ayude a otros.
Estoy acostumbrado. Cookies Net, independientemente del servidor. Nodo. Js y pasaporte no funcionan en la misma premisa. Por defecto, el nodo. JS utiliza memoria para guardar sus sesiones. La información de la Cookie de la tienda de memoria se reinicia cuando se cierra un nodo en el terminal/línea de comandos (que debe hacerse cada vez que cambie el Código del servidor), por lo que cualquier Cookie asociada con ella no tiene sentido.
Para resolver este problema, instalé redis (http://cook.coredump.me/post/18886668039/brew-install-redis) y lo conecté a mi tienda (http://www.hacksparrow.com/use-redisstore-instead-of-memorystore-express-js-in-production.html).
Esto se ejecutará en Azure, que es el servidor de producción que planeé, así que todo está bien.
Bueno, aquí hay un código. No sé qué partes instalar...
Este es el servidor. JS
/**
* Module dependencies.
*/

var express = require('express')
, app = express()
, partials = require('express-partials')
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server)
, routes = require('./routes')
// facebook
, passport = require('passport')
, facebookStrategy = require('passport-facebook').Strategy
// custom stuff
, urlCommand = require('./middleware/UrlCommand')
, azureCommand = require('./middleware/AzureCommand')
, userCommand = require('./middleware/UserCommand');

// Ports
var port = process.env.port;

if (isNaN(port))
  port = 3000;

server.listen(port);

//allows the use of Layouts
app.use(partials());

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

passport.deserializeUser(function (id, done) {
    console.log("deserialize");
    userCommand.findByID(id, function (err, user) {
        done(err, user);
    });
});

// Configuration
app.configure(function () {
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.cookieParser());
    app.use(express.bodyParser());
    app.use(express.session({ secret: 'SECRET!' }));
    app.use(express.methodOverride());
    app.use(passport.initialize());
    app.use(passport.session());  
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Facebook
passport.use(new facebookStrategy({
    clientID: CLIENT,
    clientSecret: "SECRET",
    callbackURL: "http://localhost:3000/auth/facebook/callback" //DEV
},
  function (accessToken, refreshToken, profile, done) {
      userCommand.findOrCreate(profile.id, profile.name.givenName,   profile.name.familyName, profile.emails[0].value, accessToken, function (error, user) {
          return done(null, user);
      });
  }
));

// Routes
app.get('/', routes.index);
app.get('/auth/facebook', passport.authenticate('facebook', { scope: 'email' }));
app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect:   '/',
                                                                   failureRedirect: '/login' }));

// Sockets
io.sockets.on('connection', function (socket) {
    // when the client emits 'sendURL', this listens and executes
    socket.on('sendURL', function (data) {
        console.log('sendURL called: ' + data);
        urlCommand.AddURL(data);

        // we tell the client to execute 'processURL'
        io.sockets.emit('urlComplete', data);
    });
});

console.log("Express server listening on port %d in %s mode", port, app.settings.env);
Índice. JS
exports.index = function (req, res) {
    console.log(req.user); // ALWAYS NULL
    res.render('index', { title: 'Express' })
};
Comandos de usuario
var azureCommand = require('../middleware/AzureCommand');
var tableService = azureCommand.CreateTableService();

function findByID(id, callback) {
    console.log('FindByID');

    tableService.queryEntity('user', 'user', id, function (error, entity) {
        console.log('Found him: ' + entity.Email);
        callback(error, entity);
    });
}

function findOrCreate(id, first, last, email, accessToken, callback) {
    var user = {
        PartitionKey: 'user'
        , RowKey: id
        , First: first
        , Last: last
        , Email: email
        , AccessToken: accessToken
   }

    tableService.insertEntity('user', user, function (error) {
        callback(null, user);
    });
}

exports.findByID = findByID;
exports.findOrCreate = findOrCreate;
Esto es lo que el registro de salida muestra al exportar la sesión...
El problema con
node server.js
info  - socket.io started
Express server listening on port 3000 in development mode
{ cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true },
  passport: {} 
}
debug - served static content /socket.io.js

La mejor manera de resolver el problema

está en las funciones serializeUser y deserializeUser.
Como puede notar, cuando hace clic en el botón fblogin, deserializeUser se llama por primera y única vez - de hecho, se llama en id, que acaba de ser devuelto por la función serializeUser. Si el usuario no puede ser encontrado a través del id proporcionado en este momento, el passport.user no se guardará en la sesión.
Por lo tanto, passport.deserializeUser no se llama en absoluto en la siguiente solicitud, ya que express.session no se llena con el ID de usuario del pasaporte.
En resumen: usted necesita comprobar que req.session devuelve serializeUser, que no puede entender y deserializar.
Sólo para información: el objeto id correcto del usuario autenticado debe ser el siguiente:
{ 
   cookie: { path: '/', _expires: null,  originalMaxAge: null, httpOnly: true },
   passport: { user: 51772291b3367f0000000001 } 
}