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

197
Vistas
El enrutador Nuxt3 no empuja al usuario a cierta página

Tengo dos middlewares:

  1. El middleware de la página de inicio de sesión empuja al usuario que ha iniciado sesión a su panel de control máximo permitido (ejemplo: usuario, propietario -> propietario / usuario -> usuario)
  2. El middleware del panel verifica las funciones de los usuarios y, si no hay permiso para visitar la página, se redirige al inicio de sesión (el trabajador será redirigido a la página de inicio de sesión si intenta ver el panel del propietario)

Para hacer que el cierre de sesión funcione, creé una ruta de consulta en el primer middleware (login?logout=true) y cuando el usuario quiere cerrar sesión, el tablero debe redirigirlo a la página de inicio de sesión con esta consulta, aunque no lo hace.

El caso es que cuando realizo la redirección, el método console.log(to) en el primer middleware me imprime:

fullPath: "/panel/propietario"

método de redirección

 this.$router.replace({ name: 'login', query: { 'logout': true } })

Primer software intermedio

 import { authoritiesRoutes } from "~~/middleware/panel" import { useAuthStore } from "~~/store/auth" export default defineNuxtRouteMiddleware(async ({ $pinia }, to, from) => { const token = useCookie('accessToken') console.log(to) if (to.query.logout === 'true') { token.value = null return navigateTo('/login') } if (token.value) { const store = useAuthStore($pinia) await store.retrieveUser(token.value) if (store.user != null) { const permissionLevel = store.getUser.authorities.length const routeName = authoritiesRoutes[permissionLevel] const route = '/' + routeName.replace('-', '/') return route; } } })

Segundo software intermedio

 import { useAuthStore } from '~~/store/auth' export enum authoritiesRoutes { 'panel' = 1, 'dashboard' = 2, 'dashboard-owner' = 3 } export default defineNuxtRouteMiddleware(async ({ $pinia, $event }, to) => { const token = useCookie('accessToken') if (!token.value) { return navigateTo('/login') } const store = useAuthStore($pinia) await store.retrieveUser(token.value) if (store.user == null) { return navigateTo('/login') } const permissionLevel = authoritiesRoutes[to.name]; if (store.getUser.authorities.length < permissionLevel) { return navigateTo("/login?error=you%20don't%20have%20permission%20to%20watch%20this%20page") } })
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Descubrí que (async ({ $pinia }, to, from) en el middleware debería ser (async (to, { $pinia }) También descubrí que el método useCookie solo funciona cuando se vuelve a cargar la página, así que hice mi tarea esto camino:

  1. Primer software intermedio
 export default defineNuxtRouteMiddleware(async (to, { $pinia }) => { var token = useCookie('accessToken') const store = useAuthStore($pinia) if (to.query.logout === 'true') { if (!token.value) { return navigateTo('/login') } token.value = null if (process.client) { store.logout() } } if (token.value) { await store.retrieveUser(token.value) if (store.user != null) { const permissionLevel = store.getUser.authorities.length const routeName = authoritiesRoutes[permissionLevel] const route = '/' + routeName.replace('-', '/') return route; } } })
  1. El segundo middleware permanece igual
  2. Login.vue ahora ha creado un método que se ve así:
 created () { if (this.$route.query.logout == 'true') { this.$router.go(0) } }
about 4 years ago · Juan Pablo Isaza 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