利用导航守卫,设置用户访问权限

导航守卫意思是符合条件的就放行,进行路由跳转并进行一系列的业务与逻辑

全局守卫:整个页面一旦有路由发生变化,它都能监测的到,它们负责所有路由的变化

已知:token令牌已经被存储在本地,并将数据放到了vuex中的state的token中。

在router文件夹--->index.js,,,这里用到了全局守卫中的前置守卫。

全局前置守卫,初始化时执行、每次路由切换前执行。主要进行权限的判断,如果权限不符合要求就不放行(next),还可以在路由中添加meta:{属性:属性值},自定义其中的属性,主要用于哪些组件是否需要鉴权

router.beforeEach(async (to, from, next) => {
    // to可以获取到你要跳转的那个路由信息
    // from可以获取到你现在从哪个路由而来的信息
    // next放行函数  next()
    // next()
    // next(path)放行到指定的路由
    let token = store.state.user.token
    // 用户信息
    let name = store.state.user.userInfo.name
    if (token) {
        if (to.path == '/login' || to.path == '/register') {
            next('/home')
        } else {
            // 登录了但是去的不是login
            if (name) {
                next()
            } else {
                // 没有用户信息,派发action让用户存储用户信息
                try {
                    await store.dispatch("getUserInfo")
                    next()
                } catch (error) {
                    // console.log(error.message)
                    // token失效了,获取不到用户信息,清除所有token信息,并回到login
                    // 清除token
                    store.dispatch("userLogout")
                    next('/login')
                }
            }
        }
    } else {
        // 未登录
       let toPath=to.path
       if(toPath=='/trade' || toPath.indexOf('/pay')!=-1 || toPath.indexOf('/center')!=-1){
        //把未登录的时候想去的地址通过query传递过去 存储在地址栏中 
        next('/login?redirect='+toPath)
       }else{
           next()
       }
    }
})

而后置守卫的作用,目前了解到的就是在使用title中能够准确表达当前所访问的标题,这种标题相对于前置路由守卫更有准确性。

独享路由守卫只有前置没有后置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值