Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

237
Vistas
¿Cómo usar diferentes sesiones para diferentes rutas en express?

Estoy tratando de hacer que la funcionalidad de inicio/cierre de sesión sea de dos categorías, admin y employee .
Y cuando se use app.use(session()) , la sesión estará disponible para todas las rutas. Y eso es genial. Pero cuando quiero cerrar sesión, digamos administrador usando req.session.destroy() . Se cierra la sesión, pero toda la sesión se ha ido, incluido el administrador y el empleado. Y eso no es lo que quiero. Quiero destruir solo la sesión relacionada con el administrador para el cierre de sesión del administrador y la sesión relacionada con el empleado para el cierre de sesión del empleado. Entonces, ¿cómo puedo hacer esto?
Y soy nuevo en autenticación y autorización. Hágame saber cuáles son las mejores prácticas para usar sesiones, o si es mejor JWT o cualquier cosa que me ayude a ser mejor en eso.
Para esta pregunta relacionada.
mi aplicación.js

 // session app.use( session({ secret: process.env.SECRET, resave: false, saveUninitialized: false, store, cookie: { maxAge: 20000, secure: false, }, }) ); app.use("/api/admin", adminRoutes); app.use("/api/employee", employeeRoutes); app.get("/api", (req, res) => { res.send("Api is running"); });

y cuando se llama a la ruta api/admin/login , se llama a este controlador,

 const adminLoginController = asyncHandler(async (req, res) => { console.log("I ran"); const { pass } = req.body; if (someDBCheckHere) { req.session.adminAuthenticated = true; req.session.admin = { pass: pass }; res.send("success"); } else { res.status(401).send({ message: "Login Failed" }); console.log("failure"); } });
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No estoy muy seguro de por qué destruirías la sesión. ¿Lo leíste en alguna parte que te dice que lo hagas?
Entonces, por el comportamiento, puede ver que la sesión está destinada a vivir, no a destruirse: D

Para "cerrar sesión" de un usuario, simplemente configure la cookie en una fecha de caducidad

over 4 years ago · Santiago Trujillo Denunciar

0

Confirme si mi interpretación de su requisito es correcta:

Sus usuarios pueden iniciar sesión en dos roles, con diferentes contraseñas por rol. Y es posible que incluso inicien sesión en ambos roles simultáneamente (ya sea dando dos contraseñas o porque el rol de administrador incluye el rol de empleado).

Puede lograr esto teniendo solo una sesión, con los atributos req.session.employeeAuthenticated y req.session.adminAuthenticated . Después de validar una contraseña, establecería uno (o ambos) de estos atributos, y los usuarios también podrían "cerrar la sesión del rol de administrador", después de lo cual simplemente establecería req.session.adminAuthenticated = false pero mantendría la sesión.

La primera de las adminRoutes debe validar que el usuario actual tenga el rol de administrador:

 function(req, res, next) { if (req.session.adminAuthenticated) next(); else res.status(403).end("Forbidden for non-admins"); }

(y del mismo modo en employeeRoutes ).

Solo cuando el usuario cierre la sesión por completo, llamarías a req.session.destroy() .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda