Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

256
Views
Redirigir a la página de inicio de sesión cuando el usuario cierra la sesión en Vue

Soy muy principiante en JS y VUE. Hago mini CMS en Vue y Laravel. Creo este enrutador en Vue:

 import Vue from 'vue' import Router from 'vue-router' // Containers const TheContainer = () => import('@/containers/TheContainer') // Views const Dashboard = () => import('@/views/Dashboard') .... Vue.use(Router) let router = new Router({ mode: 'hash', // https://router.vuejs.org/api/#mode linkActiveClass: 'active', scrollBehavior: () => ({ y: 0 }), routes: configRoutes() }) router.beforeEach((to, from, next) => { let roles = localStorage.getItem("roles"); if(roles != null){ roles = roles.split(',') } if(to.matched.some(record => record.meta.requiresAdmin)) { if(roles != null && roles.indexOf('admin') >= 0 ){ next() }else{ next({ path: '/login', params: { nextUrl: to.fullPath } }) } }else if(to.matched.some(record => record.meta.requiresUser)) { if(roles != null && roles.indexOf('user') >= 0 ){ next() }else{ next({ path: '/login', params: { nextUrl: to.fullPath } }) } }else{ next() } }) export default router function configRoutes () { return [ { path: '/', redirect: '/dashboard', name: 'Home', component: TheContainer, children: [ { path: 'dashboard', name: 'Dashboard', component: Dashboard }, ] }, ] }

Funciona bien, pero tengo 2 problemas:

  1. Cuando el usuario no inicia sesión, entonces necesito redirigir a mi página de inicio de sesión (/inicio de sesión), no a /dashboard
  2. Cuando expiró la sesión del usuario, redirigir a la página de inicio de sesión

Si el usuario está conectado, entonces la primera página (y la página principal) es /dashboard

¿Cómo puedo hacerlo?

Por favor, ayúdame.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Qué piensas de esto:

 import Vue from 'vue' import Router from 'vue-router' // Containers const TheContainer = () => import('@/containers/TheContainer') // Views const Dashboard = () => import('@/views/Dashboard') // .... Vue.use(Router) let router = new Router({ mode: 'hash', // https://router.vuejs.org/api/#mode linkActiveClass: 'active', scrollBehavior: () => ({ y: 0 }), routes: configRoutes() }) // routing logic for not-logged-in // users with a role const useToLoginObj = (to) => ({ path: '/login', params: { nextUrl: to.fullPath } }) // DON'T DO THIS IN PRODUCTION! // secure/security info should // **NEVER** BE SAVED TO LOCALSTORAGE!!!!! const fetchUserRoles = () => { const roles = localStorage.getItem("roles")?.split(',') return roles } // possible roles as keys // corresponding required meta as value const rolesDict = { admin: 'requiresAdmin', user: 'requiresUser', } const getRequiredRole = ({ to, rolesDict }) => { let requiredRole = null for (let key in roles) { // if the required role is already set, then // don't do anything if (!requiredRole && to.matched.some(record => record.meta[rolesDict[key]])) { requiredRole = key } } // if no role is required, then the // return value is null (falsy) return requiredRole } // if fetched roles include the requiredRole const routeAuthUser = ({ roles, requiredRole, toLogin, next }) => { if (!roles.includes(requiredRole)) { next(toLogin) } else { next() } } router.beforeEach((to, from, next) => { const requiredRole = getRequiredRole({to, rolesDict}) // if requiredRole is falsy (this route // doesn't require a role), then go if (!requiredRole) { next() } else { const roles = fetchUserRoles() const toLogin = useToLoginObj(to) // if no roles are there, then go to login if (!roles || !roles.length) { next(toLogin) } else { // user is routed based on her/his role routeAuthUser({ roles, requiredRole, toLogin, next }) } } })

Más detallado que el código en cuestión, pero

  • los pasos están divididos, por lo que la lógica brilla mejor
  • el orden de beforeEach de cada paso de enrutamiento es más lógico (enfoque "error primero")

No pude probarlo, por lo que puede haber errores en el código, pero la lógica (creo) es clara: divídalo en partes pequeñas y luego construya la lógica que desea a partir de esas partes pequeñas.

SUGERENCIA

Intente encontrar una solución diferente para almacenar roles de usuario. localStorage es la solución menos segura (incluso llamarla "la menos segura" es una exageración) para proteger los datos.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!