diff --git a/src/context/UserContext.js b/src/context/UserContext.js
index c8c65e8..493eede 100644
--- a/src/context/UserContext.js
+++ b/src/context/UserContext.js
@@ -1,4 +1,70 @@
 
+// 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,
+//     };
+//   };
+
+//   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 {
+//       // 可以默认不自动登录，退出就是空
+//       setUser(null);
+//     }
+//     setLoading(false);
+//   }, []);
+
+//   const saveUser = (userData) => {
+//     if (userData && (userData.userId || userData.id)) {
+//       localStorage.setItem('user', JSON.stringify(userData));
+//       setUser(formatUser(userData));
+//     } 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 必须在 UserProvider 内使用');
+//   }
+//   return context;
+// };
 import React, { createContext, useContext, useState, useEffect } from 'react';
 
 const avatarBaseUrl = process.env.REACT_APP_AVATAR_BASE_URL || '';
@@ -14,7 +80,11 @@
     return {
       userId: raw.userId || raw.id || null,
       username: raw.username || '匿名用户',
-      avatarUrl: raw.avatarUrl ? `${avatarBaseUrl}${raw.avatarUrl}` : null,
+      avatarUrl: raw.avatarUrl
+        ? raw.avatarUrl.startsWith('http')
+          ? raw.avatarUrl
+          : `${avatarBaseUrl}${raw.avatarUrl}`
+        : null,
       ...raw,
     };
   };
@@ -31,7 +101,6 @@
         setUser(null);
       }
     } else {
-      // 可以默认不自动登录，退出就是空
       setUser(null);
     }
     setLoading(false);
@@ -39,8 +108,9 @@
 
   const saveUser = (userData) => {
     if (userData && (userData.userId || userData.id)) {
-      localStorage.setItem('user', JSON.stringify(userData));
-      setUser(formatUser(userData));
+      const formatted = formatUser(userData);
+      localStorage.setItem('user', JSON.stringify(formatted));
+      setUser(formatted);
     } else {
       console.error('无效的用户数据:', userData);
     }
