修复: 退出登录未清空Vuex内存态,导致下个会话昵称/菜单残留(如yiciheng显示超级管理员)
CI/CD Deploy (Web) / 构建前端镜像并部署 (push) Successful in 33s

This commit is contained in:
张家训
2026-10-20 18:45:46 +08:00
parent 86202d0c13
commit 3b591486b6
2 changed files with 35 additions and 24 deletions
+4 -2
View File
@@ -4,7 +4,7 @@ import routes from './routers'
import store from '@/store'
import iView from 'view-design'
import config from '@/config'
import { setToken, getToken, setTitle, localSave, localRead } from '@/libs/util'
import { getToken, setTitle, localSave, localRead } from '@/libs/util'
import { formatMenuList } from '@/libs/router-util'
import { getPermissionList } from '@/api/sys/sys-permission'
@@ -106,11 +106,13 @@ router.beforeEach((to, from, next) => {
if (!turnToRedirectedFrom(to, next)) next()
}
}).catch(() => {
setToken('')
// token 失效被踢回登录页:走统一退出清理,防止内存态残留到下一个会话
store.dispatch('handleLogOut').finally(() => {
next({
name: 'login'
})
})
})
}
})
+19 -10
View File
@@ -69,20 +69,29 @@ export default {
},
// 退出登录
handleLogOut ({ state, commit }) {
return new Promise((resolve, reject) => {
logout(state.token).then(() => {
// 本地态清理:不清理的话,SPA 内退出再登录,路由守卫见 menuList 非空
// 会跳过 getUserInfo,导致上个会话的昵称/头像/菜单残留(刷新才恢复)
const clearLocalState = () => {
commit('setToken', '')
commit('setAccess', [])
// 退出时清空缓存路由
commit('setAvator', '')
commit('setUsername', '')
commit('setNickname', '')
commit('setUserId', '')
commit('setHasGetInfo', false)
// 清空内存菜单,强制下次路由守卫重新拉用户信息与权限
commit('updateMenuList', [], { root: true })
localDelete('route')
}
return new Promise((resolve) => {
logout(state.token).then(() => {
clearLocalState()
resolve()
}).catch(() => {
// logout 接口失败(如 token 已过期)也完成本地退出,避免卡在系统内
clearLocalState()
resolve()
}).catch(err => {
reject(err)
})
// 如果你的退出登录无需请求接口,则可以直接使用下面三行代码而无需使用logout调用接口
// commit('setToken', '')
// commit('setAccess', [])
// resolve()
})
},
// 获取用户相关信息
@@ -90,7 +99,7 @@ export default {
return new Promise((resolve, reject) => {
try {
getUserInfo(state.token).then(res => {
const data = res.data.data;
const data = res.data.data
commit('setAvator', data.avatar)
commit('setUsername', data.username) // 登录账号
commit('setNickname', data.nickname) // 昵称