修复: 退出登录未清空Vuex内存态,导致下个会话昵称/菜单残留(如yiciheng显示超级管理员)
CI/CD Deploy (Web) / 构建前端镜像并部署 (push) Successful in 33s
CI/CD Deploy (Web) / 构建前端镜像并部署 (push) Successful in 33s
This commit is contained in:
+6
-4
@@ -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,9 +106,11 @@ router.beforeEach((to, from, next) => {
|
||||
if (!turnToRedirectedFrom(to, next)) next()
|
||||
}
|
||||
}).catch(() => {
|
||||
setToken('')
|
||||
next({
|
||||
name: 'login'
|
||||
// token 失效被踢回登录页:走统一退出清理,防止内存态残留到下一个会话
|
||||
store.dispatch('handleLogOut').finally(() => {
|
||||
next({
|
||||
name: 'login'
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
+29
-20
@@ -8,7 +8,7 @@ export default {
|
||||
avatorImgPath: '',
|
||||
nickname: '',
|
||||
token: getToken(),
|
||||
expireTime: getExpireTime(), //增加的token过期时间
|
||||
expireTime: getExpireTime(), // 增加的token过期时间
|
||||
access: '',
|
||||
hasGetInfo: false
|
||||
},
|
||||
@@ -42,7 +42,7 @@ export default {
|
||||
},
|
||||
actions: {
|
||||
// 登录
|
||||
handleLogin ({ commit }, {username, password ,ip}) {
|
||||
handleLogin ({ commit }, { username, password, ip }) {
|
||||
username = username.trim()
|
||||
return new Promise((resolve, reject) => {
|
||||
login({
|
||||
@@ -55,8 +55,8 @@ export default {
|
||||
let token = data.token
|
||||
commit('setToken', token)
|
||||
let curDate = new Date()
|
||||
let expireTime = curDate.getTime() +24*60*60*1000 // 假设过期时间为后一天24*60*60*1000
|
||||
commit('setExpireTime',expireTime)
|
||||
let expireTime = curDate.getTime() + 24 * 60 * 60 * 1000 // 假设过期时间为后一天24*60*60*1000
|
||||
commit('setExpireTime', expireTime)
|
||||
resolve(data)
|
||||
} else {
|
||||
// 登录失败(如用户名或密码错误):把错误抛出给页面提示
|
||||
@@ -69,20 +69,29 @@ export default {
|
||||
},
|
||||
// 退出登录
|
||||
handleLogOut ({ state, commit }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
// 本地态清理:不清理的话,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(() => {
|
||||
commit('setToken', '')
|
||||
commit('setAccess', [])
|
||||
// 退出时清空缓存路由
|
||||
localDelete('route')
|
||||
clearLocalState()
|
||||
resolve()
|
||||
}).catch(() => {
|
||||
// logout 接口失败(如 token 已过期)也完成本地退出,避免卡在系统内
|
||||
clearLocalState()
|
||||
resolve()
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
// 如果你的退出登录无需请求接口,则可以直接使用下面三行代码而无需使用logout调用接口
|
||||
// commit('setToken', '')
|
||||
// commit('setAccess', [])
|
||||
// resolve()
|
||||
})
|
||||
},
|
||||
// 获取用户相关信息
|
||||
@@ -90,12 +99,12 @@ 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) // 昵称
|
||||
commit('setUserId', data.id) //用户ID
|
||||
commit('setAccess', ['admin']) //用户权限
|
||||
commit('setUsername', data.username) // 登录账号
|
||||
commit('setNickname', data.nickname) // 昵称
|
||||
commit('setUserId', data.id) // 用户ID
|
||||
commit('setAccess', ['admin']) // 用户权限
|
||||
commit('setHasGetInfo', true)
|
||||
resolve(data)
|
||||
}).catch(err => {
|
||||
|
||||
Reference in New Issue
Block a user