Soy relativamente nuevo en el desarrollo web y estoy tratando de configurar una autenticación básica. Funciona bien para rutas no estáticas, sin embargo, tengo problemas para entender cómo funciona la ruta estática. Recientemente descubrí que cuando solicito mi página autenticada (/home) usando una ruta estática .../home.html, sirve la ruta sin importar qué. Ya intenté autenticarlo de la misma manera que autentiqué /home, sin embargo, no funciona, aunque veo en el registro de la consola que la autenticación falla, por lo que se llama a isAuthenticated.
Apreciaría mucho si alguien me puede indicar la dirección correcta, ya que estoy tratando de entender la diferencia entre preguntar /home y /home.html para tener una autenticación adecuada. También noté que la mayoría de los sitios web que visito en línea no tienen rutas estáticas cuando navego por ellos. Dado que la única forma en que sé cómo redirigir una página desde el botón es usar href=/path.html, también sirvo rutas estáticas después del primer clic en el botón. Sería bueno saber cómo servir una ruta no estática (href=/path no funciona si no agrego .html al final)
Probablemente la respuesta sea bastante sencilla, pero no sé qué palabras debo buscar y, que yo sepa, tampoco pude encontrar esto en stackoverflow. Así que por favor ayúdame con esta pregunta de novato.
Aquí es donde configuro los middlewares:
app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(cookieParser()); app.use(express.static('public')); app.set('views', __dirname + '/public'); app.engine('html', engines.mustache); app.set('view engine', 'html'); app.use(require('express-session')({ secret: 'so secret much safety', resave: true, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session());Aquí es donde trato de autenticar:
function isAuthenticated(request, response, next) { console.log('isauthenticated:'+request.isAuthenticated()); if (request.isAuthenticated()){return next();} else{response.redirect('/');} } app.use('/home', isAuthenticated, function(request, response){ response.render('home.html'); //response.send('if you are viewing this page it means you are logged in'); }); app.use(express.static(__dirname + '/home'), isAuthenticated, function(request, response){ //should serve the page here });Cuando intenté alejar las vistas de la carpeta pública, los nodejs no pudieron encontrarlas, aunque cambié el directorio de vistas. Luego descubrí que cambiar al enrutador desde la aplicación solucionó el problema por completo. Esto probablemente fue bastante trivial, pero me tomó un tiempo encontrar el camino. Si otro aficionado tiene el mismo problema y termina aquí, lo siguiente funcionó para mí:
var router = express.Router(); ... app.set('views', __dirname + '/views'); ... router.use('/home', isAuthenticated, function(request, response){ response.render('home'); }); router.use(express.static(__dirname + '/home'), isAuthenticated, function(request, response){ console.log('it works'); });