Node.js Express Pasaporte Cookie Expiración

Estoy usando Passport para la autenticación en mi aplicación, y también estoy usando Express. Para resumir mi problema:Mi funcionalidad de inicio de sesión funciona bien inicialmente, pero despuésalguna la sesión del usuario expira,no Los usuarios pueden iniciar sesión.

Estoy usando la estrategia local estándar para la autenticación.

Incluiré un ejemplo tan simple como sea posible basado en mi configuración:

//-------------
//Set up authentication with Passport
//-------------
var userModel = require('./models/user')(db);
passport.use(new LocalStrategy(
    function(username, password, done) {
        var errorMessage = 'Incorrect username/password combination.';
        userModel.GetUserByUsername(username, function(err, user) {
            if (err) { return done(err); }
            if (!user) {
              return done(null, false, { message: errorMessage });
            }

            user.validatePassword(password, function(isPasswordCorrect) {
                if (!isPasswordCorrect)
                {
                    return done(null, false, { message: errorMessage });
                }

                //Update with login date
                userModel.UpdateUserWithLogin(username, user.currentLoginTime, function(err){
                    //if we have an error here, we should probably just log it
                    if(err)
                    {
                        console.log(err);
                    }
                });

                return done(null, user);
            });
        });
    }
));

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

passport.deserializeUser(function(user, done) {
    userModel.GetUserByUsername(user._id, function(err, user) {
            done(err, user);
        });
});

//-------------
//Set up express and configure
//-------------
var sessionStore = new SkinStore(db);
var app = express();

app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.engine('html', consolidate.swig);
    app.set('view engine', 'html');
    swig.init({
        root: '.',
        allowErrors: true, // allows errors to be thrown and caught by express instead of suppressed
        autoescape: false});

    app.use(express.logger('dev'));

    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser("[mysecrethere]"));
    app.use(express.session({   store: sessionStore,
                            cookie: { expires : new Date(Date.now() + 3600000) } //1 Hour
                            }));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(flash());
    app.use(expressValidator);

    app.use(express.static(path.join(__dirname, 'public')));

    //Dynamic helpers
    app.use(require('./helpers/DynamicHelpers'));

    app.use(app.router);
});

app.get('/login', routes.login);
app.post('/login', passport.authenticate('local', {failureRedirect: '/login',
                                               badRequestMessage: "Please enter username and password",
                                               failureFlash: true }),
                                               function(req, res) {
                                                    var targetUrl = req.session.pageAfterLogin;
                                                    delete req.session.pageAfterLogin;
                                                    res.redirect(targetUrl || '/account');
                                                });

app.get('/account', IsAuthenticated, routes.account.show);

Y la función de ayuda IsAuthenticated:

function IsAuthenticated(req,res,next){
    if(req.isAuthenticated())
    {
        next();
    }
    else
    {
        //save the requested page and then redirected
        req.session.pageAfterLogin = req.url;
        req.flash("error", "You must be logged in first!");
        res.redirect('/login');
    }
}

Lo que puedo encontrar al depurar es que, después de una autenticación exitosa (y después de que una cookie haya caducado), golpeo esta lógica (desde arriba):

function(req, res) {
    var targetUrl = req.session.pageAfterLogin;
    delete req.session.pageAfterLogin;
    res.redirect(targetUrl || '/account');
}

Donde puedo ver que el "req" tiene la sesión configurada correctamente, con la información de Passport almacenada correctamente. Entonces, la redirección sucede, lanuevo la solicitud no tiene información de sesión almacenada, y tiene una ID de sesión completamente nueva. Sospeché que no se estaba configurando una cookie en el cliente, y ese parece ser el caso, lo que debería explicar la falta de sesiones consistentes.

Sin embargo, no puedo entenderpor qué no se está configurando una nueva cookie. ¿Hay algún problema con la configuración de la aplicación que indique por qué sucede esto?

Debo agregar que al reiniciar la instancia de Node.js se soluciona el problema, simplemente no es algo que sea tolerable en producción.

Gracias.

ACTUALIZAR: Corrí Fiddler para ver qué sucedía con el tráfico HTTP / S, y puedo ver que cuando funciona inicialmente, obtengo una cookie configurada en el navegador (probé varias) que luego se devuelve al servidor en las siguientes peticiones.

Cuandono hace funciona, el navegador no está pasando las cookies al servidor, por lo que Node está enviando un encabezado Set-Cookie que proporciona una nueva cookie cada vez. Hasta ahora no he tenido la suerte de determinar la causa de esto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta