Tengo una aplicación Express.js con una autenticación Passport-local, estoy tratando de implementar un enrutador express en mi aplicación, ya que se está volviendo muy difícil de depurar.
Este es un ejemplo de mi archivo principal (app.js)
const express = require('express') const app = express() const passport = require('passport') const testing = require('./routes/file') app.use(passport.initialize()) app.use(passport.session()) app.use('/router', testing) const initializePassport = require('./passport-config'); initializePassport.initialize(passport); app.get('/', checkAuthenticated, (req, res) => { let user = data.key res.send(`Hi ${user}`) }) app.post('/login', checkNotAuthenticated, passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true })) function checkAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next() } res.redirect('/login') } function checkNotAuthenticated(req, res, next) { if (req.isAuthenticated()) { return res.redirect('/') } next() } app.listen(3000) Así es mi archivo principal, esto funciona perfectamente bien y solo para aclarar las cosas, la función es verificar si un usuario está autenticado o no, también mi pasaporte-config devuelve algo llamado data.key que es básicamente el nombre de usuario de el usuario.
Ahora he creado un enrutador aquí app.use('/router', testing) con la ruta como /router para fines de prueba
Ahora este es mi archivo.js que está siendo utilizado por express
const express = require('express'), router = express.Router(); var bodyParser = require('body-parser'); // Handle POST requests router.use(bodyParser.urlencoded({ extended: false })); router.use(bodyParser.json()); router.get('/test', checkAuthenticated, (req, res) => { let user = data.key; res.send(`Hello ${user}, this is coming from the router`) }) module.exports = router;Ahora, como se esperaba, cuando abro el sitio en localhost: 3000/router/test, devuelve un error indefinido para data.key ya que no está importado y luego, cuando comento la línea que causa el error, checkAuthenticated no funciona, incluso cuando No he iniciado sesión, puedo acceder a la página, ahora este es el problema, ¿cómo lo soluciono? Revisé todos los documentos del enrutador expreso y no pude encontrar suerte allí.
Gracias
Su función no está en el alcance global, necesita configurarla en global para poder verla como:
GLOBAL.authFunction = function(){ }Sugerencia:
1- cree un módulo para la autenticación, asígnele el nombre authModule.
2- importe el middleware de verificación de autenticación del módulo donde quiera.