23 lines
769 B
TypeScript
23 lines
769 B
TypeScript
// app/middleware/auth.ts - 路由守卫,未登录时重定向到登录页
|
||
import { useAuthStore } from "@/stores/auth";
|
||
|
||
export default defineNuxtRouteMiddleware(async (to) => {
|
||
// 只保护 /dashboard 路径
|
||
if (!to.path.startsWith("/dashboard")) return;
|
||
|
||
// SSR 阶段无浏览器 cookie,session 由 auth.client.ts 插件在客户端初始化
|
||
// 服务端直接放行,客户端插件执行完毕后 middleware 会带着正确状态再次运行
|
||
if (import.meta.server) return;
|
||
|
||
const authStore = useAuthStore();
|
||
|
||
// 等待 session 初始化完成(插件已发起,此处复用同一 Promise 去重)
|
||
if (!authStore.initialized) {
|
||
await authStore.fetchSession();
|
||
}
|
||
|
||
if (!authStore.isOnline) {
|
||
return navigateTo("/login");
|
||
}
|
||
});
|