瀏覽代碼

fix(auth): 修复localStorage存储格式,使用response.json()解析数据

问题分析:
- Hono RPC客户端返回的是Response对象,不是普通数据对象
- 直接存储response对象会导致localStorage存储空字符串
- 需要调用response.json()解析数据,并使用JSON.stringify()存储

修复内容:
- useQuery: `response` → `await response.json()` + `JSON.stringify(userInfo)`
- loginMutation: `response.user` → `await response.json()` 解构 {token, user}
- 存储: `Taro.setStorageSync(USER_KEY, JSON.stringify(user))`

参考实现: 用人方小程序(enterprise-auth-ui)的正确做法

影响: 登录后localStorage现在正确存储token和user数据

🤖 Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 3 周之前
父節點
當前提交
e64032b91d
共有 1 個文件被更改,包括 11 次插入10 次删除
  1. 11 10
      mini-ui-packages/rencai-auth-ui/src/hooks/useAuth.tsx

+ 11 - 10
mini-ui-packages/rencai-auth-ui/src/hooks/useAuth.tsx

@@ -47,11 +47,11 @@ export const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) =>
           throw new Error('获取用户信息失败')
         }
 
-        // 直接使用响应数据,类型已通过RPC推断保证一致
-        const userInfo = response
+        // 使用 response.json() 解析数据
+        const userInfo = await response.json()
 
-        // 缓存到本地存储
-        Taro.setStorageSync(USER_KEY, userInfo)
+        // 缓存到本地存储(序列化为JSON字符串)
+        Taro.setStorageSync(USER_KEY, JSON.stringify(userInfo))
         return userInfo
       } catch (error) {
         console.error('获取用户信息失败:', error)
@@ -85,14 +85,15 @@ export const AuthProvider: React.FC<{ children: ReactNode }> = ({ children }) =>
         throw new Error('登录失败')
       }
 
-      // 直接使用响应数据,类型已通过RPC推断保证一致
-      const userInfo = response.user
+      // 使用 response.json() 解析数据
+      const data = await response.json()
+      const { token, user } = data
 
-      // 保存到本地存储
-      Taro.setStorageSync(TOKEN_KEY, response.token)
-      Taro.setStorageSync(USER_KEY, userInfo)
+      // 保存到本地存储(user序列化为JSON字符串)
+      Taro.setStorageSync(TOKEN_KEY, token)
+      Taro.setStorageSync(USER_KEY, JSON.stringify(user))
 
-      setToken(response.token)
+      setToken(token)
     },
     onSuccess: () => {
       // 刷新用户信息