Me pregunto si es posible "reevaluar" esencialmente las condiciones del middleware sin cambiar realmente la ruta actual.
El propósito del middleware es evitar que los usuarios que no hayan iniciado sesión accedan al "panel de control". Mi problema es que un usuario podría iniciar o cerrar sesión sin cambiar necesariamente la ruta, pero no sería redirigido hasta que intente cambiar de página.
Tengo una acción de VueX que se activa cuando cambia el estado de autenticación del usuario, pero esto (por lo que puedo ver), no puede acceder a las variables de redirección o ruta.
// /mixins/auth.js const reevaluateAuthStatus = (store, redirect, route) => { console.log(route) const redirectPolicy = route.meta.map((meta) => { if (meta.auth && typeof meta.auth.redirectPolicy !== 'undefined') { return meta.auth.redirectPolicy[0] } return [] }) const user = store.getters['auth/getUser'] if (redirectPolicy.includes('LOGGEDOUT')) { if (user) { return redirect('/dashboard') } } else if (redirectPolicy.includes('LOGGEDIN')) { if (!user) { return redirect('/login') } } } module.exports = { reevaluateAuthStatus } // /middleware/auth.js import { reevaluateAuthStatus } from '../mixins/auth' export default function ({ store, redirect, route }) { reevaluateAuthStatus(store, redirect, route) }Agradezco cualquier ayuda en esto :)
No puede volver a evaluar un middleware AFAIK porque es principalmente esto (como se indica en la documentación )
los middlewares se llamarán [...] en el lado del cliente al navegar a otras rutas
2 formas limpias en las que aún puede lograr este IMO:
$fetch nuevamente o cualquier otro gancho de búsqueda relacionado con datos en NuxtAlgunas soluciones más feas probablemente serían:
setInterval interno y verificar si el estado real sigue siendo válido cada 5 segundos más o menosthis.$router.go(0) como se explica de alguna manera en la documentación del enrutador Vue Aún así, en la mayoría de los casos, no creo que este pueda ser un gran problema si el usuario está desconectado, porque solo será redirigido una vez que intente algo.
Como si el usuario iniciara sesión, ni siquiera estoy seguro de en qué caso puede suceder esto si no está haciendo algo proactivo en su SPA.