aquí está mi enrutador:
router.post('/login', passport.authenticate('local'), (req, res, next) => { body('backurl').trim().escape(); let referrer = req.get('Referrer') if (!req.user) { return res.render('login', { message: 'Unable to login, the password or the username are wrong', backUrl: referrer }); } if (req.body.backurl == null || req.body.backurl == 'http://localhost:3000/signup' || req.body.backurl == 'http://localhost:3000/login') { return res.redirect('/yourcourses'); } return res.redirect(req.body.backurl); } );Cuando el usuario y la autenticación local funcionan, funciona perfectamente, sin embargo, si falla, quiero volver a mostrar la página de inicio de sesión con un mensaje y una variable, sin embargo, si falla, el sitio web simplemente crea una página vacía con la palabra "no autorizado" sin algo mas, como lo soluciono? ¡Gracias!
Cuando falla la autenticación en Passport, no se llama a la función next() , la cadena de middleware se detiene y se devuelve un error genérico, es por eso que su código no se está ejecutando.
La solución podría ser crear otra ruta, por ejemplo, '/loginfail' , y mover allí el código que vuelve a mostrar la página de 'inicio de sesión' con la referencia y el mensaje de error.
Luego, modifique la llamada a passport.authenticate para incluir un objeto de opciones, como este:
passport.authenticate('local', { failureRedirect: '/loginfail' });Entonces, cuando falla la autenticación, Passport llama a la ruta que especificó.