【Vue】登录访问拦截 - 路由前置守卫

注意搜的是vue-router的官网

image-20240211091540612

image-20240211091455900

目标:基于全局前置守卫,进行页面访问拦截处理

说明:智慧商城项目,大部分页面,游客都可以直接访问, 如遇到需要登录才能进行的操作,提示并跳转到登录

但是:对于支付页,订单页等,必须是登录的用户才能访问的,游客不能进入该页面,需要做拦截处理

访问权限页面时,拦截或放行的关键点? → 用户是否有登录权证 token

image-20230623173049799

路由导航守卫 - 全局前置守卫

1.所有的路由一旦被匹配到,都会先经过全局前置守卫

2.只有全局前置守卫放行,才会真正解析渲染组件,才能看到页面内容

router.beforeEach((to, from, next) => {
  // 所有的路由在真正访问到之前(解析渲染对应组件页面前),都会先经过全局前置守卫
  // to和from是路由器对象,next是函数
  // 1. to   往哪里去, 到哪去的路由信息对象(路径,参数)
  // 2. from 从哪里来, 从哪来的路由信息对象(路径,参数)
  // 3. next() 是否放行
  //    如果next()调用,就是放行,放行到to要去的路径
  //    next(路径) 进行拦截,拦截到next里面配置的路径页面
})

image-20240211093540437

image-20230623173117931

path和fullPath区别

path:指的就是路径,不包含一些查询参数

fullPath:包含查询参数

image-20240211115806407

store/index.js

export default new Vuex.Store({
  getters: {
    token (state) {
      return state.user.userInfo.token
    }
  },
  modules: {
    user,
    cart
  }
})

router/index.js

// 定义一个数组,专门用户存放所有需要权限访问的页面
const authUrls = ['/pay', '/myorder']

router.beforeEach((to, from, next) => {
  // console.log(to, from, next)
  // 看 to.path 是否在 authUrls 中出现过
  if (!authUrls.includes(to.path)) {
    // 非权限页面,直接放行
    next()
    // 后面的代码就不需要执行了
    return
  }

  // 是权限页面,需要判断token
  // const token = store.state.user.userInfo.token
  const token = store.getters.token
  if (token) {
    next()
  } else {
    next('/login')
  }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值