64 lines
1.5 KiB
JavaScript
64 lines
1.5 KiB
JavaScript
import { createRouter, createWebHistory } from 'vue-router';
|
|
import AuthPage from '../components/authentication/AuthPage.vue';
|
|
import MainPage from '../views/mainpage/index.vue';
|
|
|
|
// 路由守卫:检查是否登录 - 优化版
|
|
const requireAuth = (to, from, next) => {
|
|
// 更可靠的登录状态检查
|
|
const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true';
|
|
const hasUserInfo = !!localStorage.getItem('userInfo');
|
|
|
|
if (isLoggedIn && hasUserInfo) {
|
|
next();
|
|
} else {
|
|
// 清除无效的登录状态
|
|
localStorage.removeItem('isLoggedIn');
|
|
next('/');
|
|
}
|
|
};
|
|
|
|
const routes = [
|
|
{
|
|
path: '/',
|
|
name: 'Auth',
|
|
component: AuthPage,
|
|
beforeEnter: (to, from, next) => {
|
|
const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true';
|
|
const hasUserInfo = !!localStorage.getItem('userInfo');
|
|
|
|
if (isLoggedIn && hasUserInfo) {
|
|
next('/main');
|
|
} else {
|
|
next();
|
|
}
|
|
}
|
|
},
|
|
{
|
|
path: '/main',
|
|
name: 'Main',
|
|
component: MainPage,
|
|
beforeEnter: requireAuth
|
|
},
|
|
{
|
|
path: '/:pathMatch(.*)*',
|
|
redirect: '/'
|
|
}
|
|
];
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes
|
|
});
|
|
|
|
// 全局路由守卫,处理可能的登录状态异常
|
|
router.beforeEach((to, from, next) => {
|
|
// 对所有需要授权的路由进行检查
|
|
if (to.matched.some(record => record.beforeEnter === requireAuth)) {
|
|
requireAuth(to, from, next);
|
|
} else {
|
|
next();
|
|
}
|
|
});
|
|
|
|
export default router;
|