Express 3.0 y autenticación de pasaporte

Estoy usando [email protected] con [email protected] y estoy usando la estrategia local para la autenticación.

Todo parece funcionar bien y redirige el éxito y el fracaso correctamente.

app.post('/login', passport.authenticate('local', { failureRedirect: '/' }), function(req, res) { console.log(req.isAuthenticated()); // true res.redirect('/users/' + req.user.id ); }); 

Pero si agrego asegurarAutenticado en la ruta del perfil

 app.get('/users/:id', ensureAuthenticated, routes.user); function ensureAuthenticated(req, res, next) { console.log(req.isAuthenticated()); // false if (req.isAuthenticated()) { return next(); } res.redirect('/'); } 

me redirige a ‘/’ (que es la página de inicio de sesión) en lugar de ‘/ users / id’ (perfil de usuario) después de iniciar sesión. El problema es req.isAuthenticated () siempre devuelve false y no hay ninguna variable req.user en la depuración.

¿Es un problema con Express 3 y la interacción con el pasaporte o hice algo mal?

También tuve un problema similar, pero resultó que estaba usando sesiones Express sin especificar un almacén de datos para los datos de la sesión. Eso significaba que los datos de la sesión se almacenaban en la memoria RAM, y como estaba usando varios trabajadores, el almacenamiento de la sesión no se compartía entre los trabajadores. Reconfiguré mi sesión RedisStore para usar un RedisStore en RedisStore lugar, y isAuthenticated() comenzó a regresar como se esperaba.

 app.use express.session secret: '...' store: new RedisStore host: redisUrl.hostname port: redisUrl.port db: ... pass: ... 

authenticate () es un middleware. de los documentos:

 app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); }); 

El problema fue que lo curl -L -d "name=Test&password=1" con curl -L -d "name=Test&password=1" y curl -L no funciona como esperaba. Pero funciona bien con el navegador web.

También estuve luchando con este problema durante años. Lo que lo arregló para mí fue cambiar la propiedad maxAge de la cookie de sesión; antes era demasiado baja:

 app.use(express.cookieParser()); app.use(express.session({ secret: config.session.secret, cookie: { maxAge: 1800000, //previously set to just 1800 - which was too low httpOnly: true } })); 

Después de este cambio, req.isAuthenticated() devolvió true