diff --git a/src/context/UserContext.js b/src/context/UserContext.js
index 01f500d..7b75005 100644
--- a/src/context/UserContext.js
+++ b/src/context/UserContext.js
@@ -1,3 +1,79 @@
+// import React, { createContext, useContext, useState, useEffect } from 'react';
+
+// const avatarBaseUrl = process.env.REACT_APP_AVATAR_BASE_URL || '';
+
+// export const UserContext = createContext();
+
+// export const UserProvider = ({ children }) => {
+//   const [user, setUser] = useState(null);
+//   const [loading, setLoading] = useState(true);
+
+//   // ✅ 标准化用户数据结构
+//   const formatUser = (raw) => {
+//     if (!raw) return null;
+//     return {
+//       userId: raw.userId || raw.id || null,
+//       username: raw.username || '匿名用户',
+//       avatarUrl: raw.avatarUrl ? `${avatarBaseUrl}${raw.avatarUrl}` : null,
+//       ...raw, // 保留其它字段（如 email, level 等）
+//     };
+//   };
+
+//   useEffect(() => {
+//     const storedUser = localStorage.getItem('user');
+//     if (storedUser) {
+//       try {
+//         const parsed = JSON.parse(storedUser);
+//         setUser(formatUser(parsed));
+//       } catch (err) {
+//         console.error('本地用户信息解析失败:', err);
+//         localStorage.removeItem('user');
+//         setUser(null);
+//       }
+//     } else {
+//       // 设置默认用户
+//       const defaultUser = {
+//         userId: 1,
+//         username: '测试用户',
+//         avatarUrl: null,
+//       };
+//       localStorage.setItem('user', JSON.stringify(defaultUser));
+//       setUser(formatUser(defaultUser));
+//     }
+//     setLoading(false);
+//   }, []);
+
+//   const saveUser = (userData) => {
+//     if (userData && (userData.userId || userData.id)) {
+//       const formatted = formatUser(userData);
+//       localStorage.setItem('user', JSON.stringify(userData)); // 原始数据存储
+//       setUser(formatted); // 格式化后使用
+//     } else {
+//       console.error('无效的用户数据:', userData);
+//     }
+//   };
+
+//   const logout = () => {
+//     localStorage.removeItem('user');
+//     setUser(null);
+//   };
+
+//   return (
+//     <UserContext.Provider value={{ user, saveUser, logout, loading }}>
+//       {children}
+//     </UserContext.Provider>
+//   );
+// };
+
+// export const useUser = () => {
+//   const context = useContext(UserContext);
+//   if (!context) {
+//     throw new Error('useUser must be used within a UserProvider');
+//   }
+//   return context;
+// };
+
+
 import React, { createContext, useContext, useState, useEffect } from 'react';
 
 const avatarBaseUrl = process.env.REACT_APP_AVATAR_BASE_URL || '';
@@ -8,14 +84,13 @@
   const [user, setUser] = useState(null);
   const [loading, setLoading] = useState(true);
 
-  // ✅ 标准化用户数据结构
   const formatUser = (raw) => {
     if (!raw) return null;
     return {
       userId: raw.userId || raw.id || null,
       username: raw.username || '匿名用户',
       avatarUrl: raw.avatarUrl ? `${avatarBaseUrl}${raw.avatarUrl}` : null,
-      ...raw, // 保留其它字段（如 email, level 等）
+      ...raw,
     };
   };
 
@@ -31,23 +106,16 @@
         setUser(null);
       }
     } else {
-      // 设置默认用户
-      const defaultUser = {
-        userId: 1,
-        username: '测试用户',
-        avatarUrl: null,
-      };
-      localStorage.setItem('user', JSON.stringify(defaultUser));
-      setUser(formatUser(defaultUser));
+      // 可以默认不自动登录，退出就是空
+      setUser(null);
     }
     setLoading(false);
   }, []);
 
   const saveUser = (userData) => {
     if (userData && (userData.userId || userData.id)) {
-      const formatted = formatUser(userData);
-      localStorage.setItem('user', JSON.stringify(userData)); // 原始数据存储
-      setUser(formatted); // 格式化后使用
+      localStorage.setItem('user', JSON.stringify(userData));
+      setUser(formatUser(userData));
     } else {
       console.error('无效的用户数据:', userData);
     }
@@ -68,7 +136,7 @@
 export const useUser = () => {
   const context = useContext(UserContext);
   if (!context) {
-    throw new Error('useUser must be used within a UserProvider');
+    throw new Error('useUser 必须在 UserProvider 内使用');
   }
   return context;
 };
