VueRouter全局前置导航守卫

VueRouter里的导航守卫分为三种:全局守卫、路由独享守卫、路由组件内的守卫,本文着重讲解使用全局前置守卫实现App的访问权限控制。

1. vue2 + vue-router3 + vuex3 环境下的全局前置守卫

# 语法
# to 要去哪
# from 从哪来
# to 和 from 都是获取路由信息对象
# next() 放行函数,等价于 this.$router.push(...) 
# next() 表示放行
# next('/路径') 强制拦截到对应的路径

router.beforeEach( (to, from, next) => {
    ...
})
import Vue from 'vue'
import VueRouter from 'vue-router'
# vuex仓库
import store from '@/store'
Vue.use(VueRouter)

const router = new VueRouter({
  routes: [...]
})

router.beforeEach((to, from, next) => {
  # 不需要登录的页面 / 白名单
  const wihteList = ['/login']
  # 如果没有Token,并且不在白名单内,转回登录页
  if (!store.state.user.token && !wihteList.includes(to.path)) return next('/login')
  # 反之放行
  next()
})

2. vue3 + vue-router4 + pinia 环境下的全局前置守卫

# 语法
# return '/login' 跳转指定地址
# 不返回, 或者 return true 就是放行
# 不推荐使用 next() 放行函数了
router.beforeEach((to, from) => {
  // ...
  // 返回 false 以取消导航
  return false
})
router.beforeEach((to) => {
  # Pinia仓库
  const store = useUserStore()
  # 不需要登录的页面 / 白名单
  const wihteList = ['/login']
  # 如果没有登录且不在白名单内, 去登录
  if (!store.user?.token && !wihteList.includes(to.path)) return '/login'
  # 否则不做任何处理
})

End----------------------------

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值