76 lines
1.7 KiB
JavaScript
76 lines
1.7 KiB
JavaScript
import { createRouter, createWebHistory } from 'vue-router'
|
||
import { useUserStore } from '@/stores'
|
||
import { getToken, setToken } from '@/utils/auth'
|
||
|
||
const routes = [
|
||
{
|
||
path: '/',
|
||
redirect: '/home'
|
||
},
|
||
{
|
||
path: '/login',
|
||
name: 'Login',
|
||
component: () => import('@/views/login/index.vue')
|
||
},
|
||
{
|
||
path: '/home',
|
||
name: 'home',
|
||
component: () => import('@/views/home/index.vue')
|
||
},
|
||
{
|
||
path: '/generate',
|
||
name: 'generate',
|
||
component: () => import('@/views/home/index.vue')
|
||
}
|
||
]
|
||
|
||
const router = createRouter({
|
||
history: createWebHistory(import.meta.env.BASE_URL),
|
||
routes
|
||
})
|
||
|
||
router.beforeEach(async (to, from) => {
|
||
if (to.query.token) {
|
||
setToken(to.query.token)
|
||
} else {
|
||
// 检查是否有 token
|
||
const token = getToken()
|
||
if (!token) {
|
||
// 没有 token,重定向到登录页
|
||
return '/login'
|
||
}
|
||
}
|
||
|
||
// 白名单路径(不需要验证 token 的路径)
|
||
const whiteList = ['/login']
|
||
// 获取用户 store 实例
|
||
const userStore = useUserStore()
|
||
// 如果访问的是白名单路径,直接放行
|
||
if (whiteList.includes(to.path)) {
|
||
return true
|
||
}
|
||
|
||
// 检查 token 是否有效
|
||
try {
|
||
const isTokenValid = await userStore.checkTokenValid()
|
||
console.log(isTokenValid)
|
||
if (isTokenValid) {
|
||
// token 有效,允许访问
|
||
if (!userStore.userInfo.id) {
|
||
// 如果用户信息不存在,则从服务器获取
|
||
await userStore.getInfo()
|
||
}
|
||
return true
|
||
} else {
|
||
// token 无效,重定向到登录页
|
||
return '/login'
|
||
}
|
||
} catch (error) {
|
||
// 验证过程中出错,重定向到登录页
|
||
console.error('验证 token 时出错:', error)
|
||
return '/login'
|
||
}
|
||
})
|
||
|
||
export default router
|