Răsfoiți Sursa

♻️ refactor(auth): optimize user info loading logic

- 移除通过API获取用户信息的逻辑,改为直接从本地存储读取
- 调整useQuery配置,设置enabled: false使其不自动执行查询
- 移除isLoading状态中的query加载状态,简化状态管理
- 优化用户信息JSON解析错误处理逻辑
yourname 3 luni în urmă
părinte
comite
6aebdef73d
1 a modificat fișierele cu 22 adăugiri și 27 ștergeri
  1. 22 27
      mini/src/utils/auth.tsx

+ 22 - 27
mini/src/utils/auth.tsx

@@ -72,32 +72,6 @@ export const AuthProvider: React.FC<PropsWithChildren> = ({ children }) => {
     silentLoginMutation.mutate()
   })
 
-  const { data: user, isLoading } = useQuery<User | null, Error>({
-    queryKey: ['currentUser'],
-    queryFn: async () => {
-      const token = Taro.getStorageSync('mini_token')
-      if (!token) {
-        return null
-      }
-      try {
-        const response = await authClient.me.$get({})
-        if (response.status !== 200) {
-          throw new Error('获取用户信息失败')
-        }
-        const user = await response.json()
-        Taro.setStorageSync('userInfo', JSON.stringify(user))
-        return user
-      } catch (error) {
-        // token无效,清除存储
-        Taro.removeStorageSync('mini_token')
-        Taro.removeStorageSync('userInfo')
-        return null
-      }
-    },
-    staleTime: Infinity, // 用户信息不常变动,设为无限期
-    refetchOnWindowFocus: false, // 失去焦点不重新获取
-    refetchOnReconnect: false, // 网络重连不重新获取
-  })
 
   const loginMutation = useMutation<User, Error, LoginRequest>({
     mutationFn: async (data) => {
@@ -201,13 +175,34 @@ export const AuthProvider: React.FC<PropsWithChildren> = ({ children }) => {
 
   const updateUser = updateUserMutation.mutateAsync
 
+  // 使用React Query获取用户信息
+  const { data: user } = useQuery<User | null>({
+    queryKey: ['currentUser'],
+    queryFn: async () => {
+      // 直接从本地存储获取用户信息
+      const userInfoStr = Taro.getStorageSync('userInfo')
+      if (userInfoStr) {
+        try {
+          return JSON.parse(userInfoStr)
+        } catch {
+          return null
+        }
+      }
+      return null
+    },
+    staleTime: Infinity, // 用户信息不常变动,设为无限期
+    refetchOnWindowFocus: false, // 失去焦点不重新获取
+    refetchOnReconnect: false, // 网络重连不重新获取
+    enabled: false, // 不自动执行,由静默登录和登录mutation更新
+  })
+
   const value = {
     user: user || null,
     login: loginMutation.mutateAsync,
     logout: logoutMutation.mutateAsync,
     register: registerMutation.mutateAsync,
     updateUser,
-    isLoading: isLoading || loginMutation.isPending || registerMutation.isPending || logoutMutation.isPending || silentLoginMutation.isPending,
+    isLoading: loginMutation.isPending || registerMutation.isPending || logoutMutation.isPending || silentLoginMutation.isPending,
     isLoggedIn: !!user,
   }