流浪のwolf

卷帝

导航

后台管理系统的前置路由守卫

// 全局前置路由守卫
/**
 * 是否登录了
 * 登录了
 * 去的是否是登录页面
 * **** 是的   则转到系统首页  ---- 都登录过了 还去登录干啥
 * **** 不是去的登录页  放行去登录页
 */

/**
 * 未登录
 * 去的是否是白名单 ? 白名单就是未登录的情况下 你可以访问哪些界面 【登录页面 404页面】
 * **** 在白名单 放行
 * **** 不在白名单 非法访问  拦截去登录页面
 */
// 导航守卫的逻辑
router.beforeEach(async (to, from, next) => {
  console.log(getToken()) // undefined
  if (getToken()) {
    console.log('登录了')
    // 去的是否是登录页
    if (to.path === '/login') {
      //   console.log('去的是登录页,登录了去的还是登录页 重复了 去系统首页')
      next('/')
    } else {
      //   console.log('去的不是登录页,放行 该去哪就去哪,没有限制了')
      // 登录了 跳转的是系统页 layout 就获取用户资料
      console.log('vuex的监视属性 userId')
      //   console.log(store.state.userInfo)
      //   await store.dispatch('getUserProfileAction')
      //   console.log(store.state.userInfo)
      //   console.log(store.getters.userId) // undefined
      // 为什么使用你 getters ???  老师要使用的
      //   if (!store.getters.userId) {
      //     console.log('获取用户资料')
      //     // 调用 vuex 的action的方法 然后在 actions 中再次调用 mutations的方法
      //     // ps:使用了await 则此函数前面要使用  async
      //     // await store.dispatch('getUserProfileAction')
      //   }
      next()
    }
    next()
  } else {
    console.log('未登录')
    // // 去的是否是白色名单 白名单数组
    // 没有登录的状态下只能去这 2 个页面
    const whiteList = ['/404', '/login']
    if (whiteList.includes(to.path)) {
      //   console.log('包含白色名单')
      // 放行
      next()
    } else {
      // 不在白色名单 就是非法访问了 拦截去登录页面
      next('/login')
    }
    // next()
  }
})

 

posted on 2022-10-27 08:38  流浪のwolf  阅读(28)  评论(0编辑  收藏  举报