路由守卫---逻辑

189 阅读1分钟

思路:

  • 首先判断路由如果跳转到登录页,直接next()【这里登录成功后,存储token至cookies】
  • 判断当前页面是否有存贮的token:如果有,证明已经登录,执行next();没有就是未登录,此时需要重定向到登录页面。
  • 这里在首次登陆的时候,控制台会报错。【他会判断是否有token,发送获取用户信息接口,此时没有登录即没有token,发送的接口或报错,401,没有访问权限】
router.beforeEach(async (to, from, next) => {
  // 进度条加载
  NProgress.start()
  
  // 如果跳转到登录路由,直接放行
  if (to.name === '登录') {
    next()
    return
  }

  // 获取token,用户名
  // 这里的token是登录页登陆成功后,后端返回的值,并存储到cookies中
  const hasToken = Cookies.get('adminToken')

  // 获取用户信息并存贮到cookies 【这里使用的是pinia(大菠萝)】
  const store = adminUserInfo()
  const { data, error } = await store.getUserInfos()

  // 判断:同时拥有token 和 userInfo,放行
  if (hasToken && !error) {
    Cookies.set('adminName', data.username)
    next()
    return
  } else {
    next('/login')
    return
  }
  
  next()
})
  • next() : 进行管道中的下一个钩子
  • next('/') 或者 next({ path: '/' })或者 next({ name: 'Login' }) : 跳转到一个不同的地址