Acceso al pasaporte y sesión persistente

Antecedentes

Tengo una aplicación MEAN con capacidades CRUD totalmente probada con cartero. He estado tratando de persistir el inicio de sesión desde hace bastante tiempo sin suerte. He leído y probado lo siguiente

documentos de pasaporteblog de toon io sobre inicio de sesiónSesión expressScotch io, autenticación de nodo facilitadaAdemás de un montón de otros materiales de lectura livianos (Muchas preguntas SO)

Pero solo he podido registrar e iniciar sesión en un usuario, no persistir el inicio de sesión con una sesión.

Mi aplicación

aquí es un enlace al repositorio completo de github (si está buscando los últimos cambios, consulte la rama de desarrollo)

Mi comprensión de la autenticación / inicio de sesión

Aquí entiendo el inicio de sesión del usuario con ejemplos de código de mi proyecto y la captura de pantalla de los resultados del cartero, así como los registros de la consola.

Configuración de pasaporte

Tengo el siguiente archivo auth.js, configura el pasaporte

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

module.exports = function(app, user){

  app.use(passport.initialize());
  app.use(passport.session());

  // passport config
  passport.use(new LocalStrategy(user.authenticate()));

  passport.serializeUser(function(user, done) {
    console.log('serializing user: ');
    console.log(user);
    done(null, user._id);
  });

  passport.deserializeUser(function(id, done) {
    user.findById(id, function(err, user) {
      console.log('no im not serial');
      done(err, user);
    });
  });
};

Esto se llama en el archivo del servidor como

//code before
var user    = require('./models/user.js');
var auth    = require('./modules/auth.js')(app, user);
// code after
Enrutamiento para iniciar sesión

En mis rutas tengo la ruta de inicio de sesión de la siguiente manera

router.post('/login', function(req, res, next) {

  passport.authenticate('local', function(err, user, info) {

    if (err) {
        return next(err);
    }

    if (!user) {
        return res.status(401).json({
            err: info
        });
    }

    req.logIn(user, function(err) {

        if (err) {
            return res.status(500).json({
                err: 'Could not log in user'
            });
        }

        res.status(200).json({
            status: 'Login successful!'
        });

    });
  })(req, res, next);
});

Esta rutatrabajos según lo probado con cartero. Entro en los detalles 'joe' y 'pass' y obtengo la siguiente respuesta.

Cuando se alcanza esta ruta, también podemos ver en la consola que el usuario está serializado.

Entonces, ¿qué sigue?

Aquí es donde me pierdo. Tengo algunas preguntas.

¿El usuario está ahora en una sesión en mi servidor?¿Debo enviar elreq.session.passport.user de vuelta al cliente?¿Necesito el ID de sesión en todas las solicitudes futuras?Probar la sesión

Tengo una segunda configuración de ruta para probar la sesión, es la siguiente

router.get('/checkauth', passport.authenticate('local'), function(req, res){

    res.status(200).json({
        status: 'Login successful!'
    });

});

La partepassport.authenticate('local') (Pensé) está allí para probar si la sesión del usuario existe antes de dar acceso a la ruta, pero nunca obtengo una respuesta 200 cuando ejecuto esto, incluso después de iniciar sesión.

¿Esta ruta espera unreq.session.passport.user pasado en la cabeza o como argumento de datos en una solicitud http que requiere autenticación?

Si me perdí algo o estoy entendiendo algo mal, por favor dígame, cualquier comentario es apreciado. Gracias a todos.

Respuestas a la pregunta(5)

Su respuesta a la pregunta