// middleware/auth.ts import { useAuthStore } from '~/stores/user'; // import redis from '~/utils/redis'; // import { getCookie } from '@/utils/cookie' export default defineNuxtRouteMiddleware((to, from) => { console.error("环境:需要权限", to.meta.requiresAuth, "isServer:", import.meta.server, "isClient:", import.meta.client, "路径:", to.fullPath); let token = ''; let isAuthed = false; let requiresAuth = to.meta.requiresAuth; // const authStore = useAuthStore(); // 初始化认证状态 // authStore.initializeAuth(); // const isAuthed = authStore.isAuthenticated; if (import.meta.client) { const authStore = useAuthStore(); authStore.initializeAuth(); token = authStore.token; isAuthed = authStore.isAuthenticated; console.log("client 获取 token", token, isAuthed); }; // // 白名单:无需验证的路由(如登录页、注册页) // const whiteList = ['/login', '/register']; // if (whiteList.includes(to.path)) return; // 放行白名单 // 检查路由是否需要验证 // const requiresAuth = to.meta.requiresAuth; // TODO 通过后台验证token的有效性 if (import.meta.server) { const headers = useRequestHeaders(['cookie']); const tokenPair = headers.cookie?.split(';').find(item => item.trim().startsWith('token=')); token = tokenPair ? tokenPair.split('=')[1] : ''; if (token) { isAuthed = true; } // const response = useResponse(); console.log("server 授权信息:", tokenPair); }; // await new Promise(resolve => { // const check = () => { // if (authStore.isInitialized) { // resolve(); // } else { // authStore.initializeAuth(); // setTimeout(check, 50); // } // }; // check(); // }); // console.log("import.meta.server", headers.cookie); // // 解析 cookie 并获取 token // const cookies = headers.cookie.split(';').reduce((acc, cookie) => { // const [key, value] = cookie.trim().split('='); // acc[key] = value; // return acc; // }, {} as Record); // if (cookies.token) { // authStore.isAuthenticated = true; // } // if (requiresAuth && authStore.isAuthenticated) { // return navigateTo(`/login?redirect=${encodeURIComponent(to.fullPath)}`); // } // const req = useRequestHeaders(['cookie']); // let tokenStr = ''; // if (req.cookie) { // tokenStr = req.cookie.split(';').find(c => c.trim().startsWith('token=')); // } // let token = !!tokenStr?.split('=')[1]; // console.log("验证权限获取到的token:", req, token); // console.log("授权验证:", requiresAuth, authStore.isAuthenticated, authStore.isInitialized); if (requiresAuth && !isAuthed) { console.log("跳转路径", to.fullPath); return navigateTo(`/login?redirect=${encodeURIComponent(to.fullPath)}`); } // // 如果用户已登录但访问的是登录页面 if (to.path === '/login' && isAuthed) { console.log("跳转至首页"); return navigateTo('/'); } } // if (!authStore.isInitialized) { // await new Promise(resolve => setTimeout(resolve, 50)); // }; // if (import.meta.client) { // authStore.initializeAuth(); // console.log("访问的路径:", to.path, authStore.isAuthenticated); // // 如果访问的是需要认证的页面且用户未登录 // if (requiresAuth && !authStore.isAuthenticated) { // // if (requiresAuth) { // console.log("访问的路径:", to.path); // return navigateTo(`/login?redirect=${encodeURIComponent(to.fullPath)}`); // } // // 如果用户已登录但访问的是登录页面 // if (to.path === '/login') { // return navigateTo('/'); // } // } );