我觉得这个路由守卫的获取用户信息逻辑不太合理
来源: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 是否有效。
00
相似问题