我觉得这个路由守卫的获取用户信息逻辑不太合理

来源:4-4 获取用户基本信息

慕粉3178367

2023-09-22

// 前置守卫
router.beforeEach(async (to, form, next) => {
  // 如果用户已登录,则不允许进入login
  // 用户未登录,只允许进入login
  if (store.getters.token) {
    if (to.path === '/login') next('/')
    else {
      if (!store.getters.hasUserInfo) {
        await store.dispatch('user/getUserInfo')
      }
      next()
    }
  } else {
    if (whiteList.has(to.path)) next()
    else next('/login')
  }
})

在store里面有存token的情况,下一步应该直接判断userInfo是否存在,不存在的话去请求接口拿到用户信息,再做路由的判断。
因为有token不代表登录了,有可能token过期了,一定是有token,有用户信息才能算登录了。才能说判断如果是去login直接跳到首页吧。
这样的逻辑会不会清晰一点。。

// 前置守卫
router.beforeEach(async (to, form, next) => {
  // 如果用户已登录,则不允许进入login
  // 用户未登录,只允许进入login
  if (store.getters.token) {
    if (!store.getters.hasUserInfo) {
      await store.dispatch('user/getUserInfo')
    }
    if (to.path === '/login') next('/')
    else next()
  } else {
    if (whiteList.has(to.path)) next()
    else next('/login')
  }
})
写回答

1回答

Sunday

2023-09-22

你好

因为咱们这里有两个验证 token 的方式(接口验证和时间验证),这个验证是在 axios 的请求拦截器和响应拦截器之中。如果 token 过期,那么就会直接清空 token 回到登录页面。

而用户信息的接口是在每次进入页面的时候,都会获取的。所以说在路由发生跳转的时候,是必然会触发的。

所以这里没有必要专门去判断 token 是否有效。

0
0

基于Vue3新标准,打造后台综合解决方案

基于Vue3重写Vue-element-admin,打造后台前端综合解决方案

1941 学习 · 1687 问题

查看课程