Saltar al contenido

vuejs: redirigir desde inicio de sesión/registro a inicio si ya ha iniciado sesión, redirigir desde otras páginas para iniciar sesión si no ha iniciado sesión en vue-router

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 Dashboardhaces la solicitud, resulta que él no ha iniciado sesión. Luego va a LoginPERO 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *