working rutas not node node.js express passport.js

node.js - rutas - routing node js



Cómo proteger la carpeta estática en Express con pasaporte (3)

Tengo un proyecto basado en Express con una autenticación requerida basada en el pasaporte.

El backoffice es una aplicación angularjs servida como archivos estáticos.

Mi código de autenticación está completamente basado en https://github.com/jaredhanson/passport-local/blob/master/examples/express3-no-connect-flash/app.js

Para no servir la aplicación angular si no está autenticado. Lo he intentado agregando asegurarAuthenticated en la ruta / admin pero hace que la ruta no funcione (404). Una vez que elimine asegúrese de autenticado el / admin se sirve.

app.use(express.static(path.join(__dirname, ''public''))); app.use(''/admin'', ensureAuthenticated, express.static(path.join(__dirname, ''admin''))); //serve routes app.use(app.router);

La carpeta pública contiene la página de inicio de sesión.

¿Cómo podría lograr esto?


Me encontré con el mismo problema, ¡esto es lo que terminé haciendo!

app.use no te permite encadenar middlewares de esa manera. Las diversas funciones app.VERB lo hacen, pero app.use no lo hace. Eso es para un middleware a la vez.

Si divide los 2 middlewares en llamadas separadas, debe obtener los resultados que desea:

app.use(''/admin'', ensureAuthenticated); app.use(''/admin'', express.static(path.join(__dirname, ''admin'')));

No se puede usar la autenticación básica mientras se sirven archivos estáticos usando Express


Puede verificar la ruta utilizando middleware y redirigirlos si no están conectados y están llegando a las páginas de administración, algo como (sin probar):

app.use(function(req, res, next) { if (req.user == null && req.path.indexOf(''/admin'') === 0) { res.redirect(''/login''); } next(); });


app.use(''/admin'', function(req,res,next){ if(req.user){ return express.static(path.join(__dirname, ''public'')); } else { res.render(403, ''login'', {message:''Please, login!''}); } }); //serve routes app.use(app.router);