'use client'; import { useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { useAuth } from '@/lib/auth'; export default function ProtectedRoute({ children }: { children: React.ReactNode }) { const router = useRouter(); const { user, isLoading } = useAuth(); useEffect(() => { // 如果非加载状态且用户未登录,重定向到登录页 if (!isLoading && !user) { console.log('ProtectedRoute: 未登录,重定向到登录页'); // 保存当前URL以便登录后可以返回 const currentUrl = window.location.href; router.push(`/login?redirect=${encodeURIComponent(currentUrl)}`); } }, [isLoading, user, router]); // 如果正在加载,显示加载指示器 if (isLoading) { return (

加载中...

); } // 如果用户未登录,不渲染任何内容(等待重定向) if (!user) { console.log('ProtectedRoute: 用户未登录,等待重定向'); return null; } // 用户已登录,渲染子组件 console.log('ProtectedRoute: 用户已登录,渲染内容'); return <>{children}; }