9
I am configuring the routes of my application in Vue.js, initially this all OK, after logging in the user is redirected to the dashboard
, now my question is how can I prevent the user from accessing the route "/login
" (again) after he already logged in and redirected him back to the previous route? (which he was before he typed in the address bar "/login
")
Reading the documentation of see, I know I can use the navigation Guards, and using the global router.beforeEach
, which has three parameters: to
, from
and next
, I know I can manipulate this behavior using the from to return the user to the previous route if they access the "/login
" while logged in, but I still haven’t been able to get him redirected.
Here’s my example of code: router/beforeEach.js
import { checkUserToken } from 'src/utils/storageData'
const isAuthRoute = route => route.path.indexOf('/login') !== -1
const isLogged = () => !checkUserToken()
const needAuth = auth => auth === true
const beforeEach = (to, from, next) => {
const auth = to.meta.requiresAuth
// verifica se a rota requer autenticação
if (needAuth(auth)) {
// verifica se o usuário já está autenticado
if (!isAuthRoute(to) && !isLogged()) {
next('/login')
} else {
if (isLogged() && to.path === '/login') {
from()
}
next()
}
} else {
next()
}
}
export default beforeEach
router/index.js:
import Vue from 'vue'
import VueRouter from 'vue-router'
import {routes} from './routes'
import beforeEach from './beforeEach'
Vue.use(VueRouter)
const router = Vue.router = new VueRouter({
linkActiveClass: 'active',
saveScrollPosition: true,
mode: 'history',
base: __dirname,
routes
})
// pega as configurações do import acima
router.beforeEach(beforeEach)
export default router
I haven’t done much with the Router yet, but from the looks of it it’s all OK, try logging in
isLogged()
andto.path
to see if you are getting to this part of the code and if the values are hitting to see if you can find something.– Pliavi
Are you sure from is a function? I think you have to use next(from) instead of from()
– bfavaretto