feat: 重构鉴权系统为双Token无感刷新,并增加前端Token过期安全预判机制
This commit is contained in:
@ -3,6 +3,7 @@ import type { RouteRecordRaw } from 'vue-router'
|
||||
import Layout from '@/layout/index.vue'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
import BomManage from '@/views/bom/BomManage.vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
// [新增] 扩展 RouteMeta 类型定义,防止 TS 报错
|
||||
declare module 'vue-router' {
|
||||
@ -231,12 +232,23 @@ const router = createRouter({
|
||||
router.beforeEach((to, from, next) => {
|
||||
const userStore = useUserStore()
|
||||
|
||||
const token = userStore.token || localStorage.getItem('token')
|
||||
const token = userStore.token || localStorage.getItem('access_token') || localStorage.getItem('token')
|
||||
|
||||
// [修复] 优先从 user 对象获取,并统一转大写,防止大小写不一致导致权限失效
|
||||
const rawRole = userStore.user?.role || userStore.role || localStorage.getItem('role') || 'user'
|
||||
const userRole = String(rawRole).toUpperCase()
|
||||
|
||||
// ============================================================
|
||||
// 安全兜底:检查 refresh_token 是否即将过期(30分钟)
|
||||
// ============================================================
|
||||
if (token && userStore.isRefreshTokenExpiringSoon()) {
|
||||
// 仅在用户主动操作时提示,避免页面加载就弹窗
|
||||
const isUserAction = to.path !== '/login' && to.path !== '/'
|
||||
if (isUserAction) {
|
||||
ElMessage.warning('您的登录状态即将失效,请及时保存数据并重新登录')
|
||||
}
|
||||
}
|
||||
|
||||
// 调试日志
|
||||
if (to.path.includes('/system')) {
|
||||
console.log(`路由守卫检查: Path=${to.path}, UserRole=${userRole}, Required=${to.meta.roles}`)
|
||||
|
||||
Reference in New Issue
Block a user