Quiero redirigir al tablero si el usuario ya inició sesión cuando intenta acceder a la ruta de inicio de sesión en express js
software intermedio
const isAuthenticate = async (req, res, next) => { const token = req.cookies.jwt; if (token) { jwt.verify(token, "thisisjwtsecret", async (err, token_decode) => { if (!err) { const u_id = token_decode._id; const userData = await User.findOne({ _id: u_id }); req.user = userData; req.isAuth = true; next(); } else { res.redirect("/user/login"); } }); } else { res.redirect("/user/login"); } };Ruta.js
// Auth Controller const AuthController = require("../../controllers/auth/AuthController"); const { isAuthenticate } = require("../../middlewares/isAutheticated"); router.get("/user/login", isAuthenticate, AuthController.login); router.post("/user/login", AuthController.checkLogin); router.get("/user/register", isAuthenticate, AuthController.createUser); router.post("/user/register", isAuthenticate, AuthController.storeUser); module.exports = router;Función de inicio de sesión
// Showing Login Page to User const login = (req, res) => { return res.render("auth/login"); };Puede dividir la funcionalidad de su función isAuthenticate() existente para que solo devuelva un resultado y luego utilícelo para hacer algo como esto:
const { promisify } = require('util'); const verify = promisify(jwt.verify); // resolves if jwt cookie verifies and user found // rejects if jwt cookie is missing or doesn't verify or user not found async function isLoggedIn(req) { const token = req.cookies.jwt; if (!token) throw new Error("no jwt cookie"); const token_decode = await verify(token, "thisisjwtsecret"); let user = await User.findOne({ _id: token_decode._id }); if (!user) throw new Error("user not found"); return; } // Showing Login Page to User // Or redirect to /dashboard if already logged in const login = async (req, res) => { try { await isLoggedIn(req); // already logged in, redirect to dashboard // you MUST make sure that /dashboard does not redirect to /user/login itself // when isLoggedIn resolves to avoid circular redirects res.redirect("/dashboard"); } catch (e) { // not logged in, render the login page res.render("auth/login"); } }; La isLoggedIn(req) se resuelve si el token se valida y el usuario se encuentra en la base de datos. De lo contrario, se rechaza. Luego puede usar eso en otras rutas para decidir si desea redirigir o no.