diff --git a/src/context/UserContext.js b/src/context/UserContext.js
index 69f73bd..39ab6cd 100644
--- a/src/context/UserContext.js
+++ b/src/context/UserContext.js
@@ -1,49 +1,7 @@
-// import React, { createContext, useContext, useState, useEffect } from 'react';
-
-// const UserContext = createContext();
-
-// export const UserProvider = ({ children }) => {
-//   const [user, setUser] = useState(null);
-//   const [loading, setLoading] = useState(true);
-
-//   useEffect(() => {
-//     const storedUser = localStorage.getItem('user');
-//     if (storedUser) {
-//       setUser(JSON.parse(storedUser));
-//     } else {
-//       // 设置默认用户（id: 1）
-//       const defaultUser = { id: 1, name: '测试用户' };
-//       localStorage.setItem('user', JSON.stringify(defaultUser));
-//       setUser(defaultUser);
-//     }
-//     setLoading(false);
-//   }, []);
-
-//   const saveUser = (userData) => {
-//     localStorage.setItem('user', JSON.stringify(userData));
-//     setUser(userData);
-//   };
-
-//   const logout = () => {
-//     localStorage.removeItem('user');
-//     setUser(null);
-//   };
-
-//   return (
-//     <UserContext.Provider value={{ user, loading, saveUser, logout }}>
-//       {children}
-//     </UserContext.Provider>
-//   );
-// };
-
-// export const useUser = () => useContext(UserContext);
-
 import React, { createContext, useContext, useState, useEffect } from 'react';
 
-// 创建上下文
-const UserContext = createContext();
+export const UserContext = createContext();
 
-// Provider 组件
 export const UserProvider = ({ children }) => {
   const [user, setUser] = useState(null);
   const [loading, setLoading] = useState(true);
@@ -51,19 +9,29 @@
   useEffect(() => {
     const storedUser = localStorage.getItem('user');
     if (storedUser) {
-      setUser(JSON.parse(storedUser));
-    } else {
-      // 设置默认用户
-      const defaultUser = { id: 1, name: '测试用户' };
-      localStorage.setItem('user', JSON.stringify(defaultUser));
-      setUser(defaultUser);
+      try {
+        const parsedUser = JSON.parse(storedUser);
+        // 验证用户对象是否有效
+        if (parsedUser && parsedUser.userId) {
+          setUser(parsedUser);
+        } else {
+          localStorage.removeItem('user');
+        }
+      } catch (error) {
+        console.error('解析用户信息失败:', error);
+        localStorage.removeItem('user');
+      }
     }
     setLoading(false);
   }, []);
 
   const saveUser = (userData) => {
-    localStorage.setItem('user', JSON.stringify(userData));
-    setUser(userData);
+    if (userData && userData.id) {
+      localStorage.setItem('user', JSON.stringify(userData));
+      setUser(userData);
+    } else {
+      console.error('无效的用户数据:', userData);
+    }
   };
 
   const logout = () => {
@@ -71,17 +39,17 @@
     setUser(null);
   };
 
-  // ✅ 加载完用户数据后再渲染子组件，避免子组件访问 null
-  if (loading) {
-    return <div>正在加载用户信息...</div>;
-  }
-
   return (
-    <UserContext.Provider value={{ user, saveUser, logout }}>
+    <UserContext.Provider value={{ user, saveUser, logout, loading }}>
       {children}
     </UserContext.Provider>
   );
 };
 
-// 自定义 hook
-export const useUser = () => useContext(UserContext);
+export const useUser = () => {
+  const context = useContext(UserContext);
+  if (!context) {
+    throw new Error('useUser must be used within a UserProvider');
+  }
+  return context;
+};
\ No newline at end of file
