Contamos con la mejor información que hemos encontrado online. Nosotros queremos que te sea útil y si deseas aportar alguna mejora siéntete libre de hacerlo..
Solución:
Esto es lo que estoy haciendo. Primero estoy usando un meta
datos para las rutas, por lo que no necesito poner manualmente todas las rutas que no requieren inicio de sesión:
routes: [
name: 'About' // + path, component, etc
,
name: 'Dashboard', // + path, component, etc
meta:
requiresAuth: true
]
Entonces, tengo una guardia global como esta:
router.beforeEach((to, from, next) =>
if (to.matched.some(record => record.meta.requiresAuth))
// this route requires auth, check if logged in
// if not, redirect to login page.
if (!store.getters.isLoggedIn)
next( name: 'Login' )
else
next() // go to wherever I'm going
else
next() // does not require auth, make sure to always call next()!
)
Aquí estoy almacenando si el usuario está conectado o no, y no hago una nueva solicitud.
En tu ejemplo, tienes olvidado para incluir Login
en la lista de páginas que “no necesitan autenticación”. Entonces, si el usuario está tratando de ir a, digamos Dashboard
haces la solicitud, resulta que él no ha iniciado sesión. Luego va a Login
PERO su código verifica, ve que no es parte de la lista de 3 “autenticación no requerida” y realiza otra llamada 🙂
¡Por lo tanto, saltarse esta “lista” es crucial! 😉
¡Buena suerte!
Si alguien todavía está buscando una respuesta, puede invertir la lógica. Entonces, de la misma manera que requiere Autenticación, tendrá rutas ocultas para usuarios autenticados. (ejemplo con base de fuego)
routes: [
path: '/',
redirect: '/login',
meta:
hideForAuth: true
,
path: '/dashboard',
name: 'dashboard',
component: Dashboard,
meta:
requiresAuth: true
]
Y en tu antes de cada uno
router.beforeEach((to, from, next) =>
firebase.auth().onAuthStateChanged(function(user)
if (to.matched.some(record => record.meta.requiresAuth))
if (!user)
next( path: '/login' );
else
next();
else
next();
if (to.matched.some(record => record.meta.hideForAuth))
if (user)
next( path: '/dashboard' );
else
next();
else
next();
);
);
Comentarios y calificaciones
Nos encantaría que puedieras mostrar este artículo si lograste el éxito.