소스 검색

🐛 fix(rpc-client): 修复请求头content-type缺失问题
- 自动为没有content-type的请求添加默认值application/json

🐛 fix(auth): 修复登录接口安全和错误处理问题
- 从用户响应中移除password字段
- 添加500错误状态码处理
- 使用try-catch捕获登录过程中的异常
- 添加详细错误日志输出

🔧 chore(auth): 优化登录响应数据验证
- 使用parseWithAwait函数进行响应数据验证

yourname 4 달 전
부모
커밋
b4caab211c
2개의 변경된 파일27개의 추가작업 그리고 4개의 파일을 삭제
  1. 6 0
      mini/src/utils/rpc-client.ts
  2. 21 4
      src/server/api/auth/login/post.ts

+ 6 - 0
mini/src/utils/rpc-client.ts

@@ -16,6 +16,11 @@ const taroFetch: any = async (input, init) => {
   
   const requestHeaders: Record<string, string> = init.headers;
 
+  const keyOfContentType = Object.keys(requestHeaders).find(item => item.toLowerCase() === 'content-type')
+  if (!keyOfContentType) {
+    requestHeaders['content-type'] = 'application/json'
+  }
+
   // 构建Taro请求选项
   const options: Taro.request.Option = {
     url,
@@ -35,6 +40,7 @@ const taroFetch: any = async (input, init) => {
 
   try {
     // const response = await Taro.request(options)
+    console.log('options', options)
     const response = await Taro.request(options)
 
     const responseHeaders = response.header;

+ 21 - 4
src/server/api/auth/login/post.ts

@@ -6,6 +6,7 @@ import { ErrorSchema } from '../../../utils/errorHandler'
 import { AppDataSource } from '../../../data-source'
 import { AuthContext } from '../../../types/context'
 import { UserSchema } from '@/server/modules/users/user.schema'
+import { parseWithAwait } from '@/server/utils/parseWithAwait'
 
 const userService = new UserService(AppDataSource)
 const authService = new AuthService(userService)
@@ -21,7 +22,7 @@ const LoginSchema = z.object({
   })
 })
 
-const UserResponseSchema = UserSchema
+const UserResponseSchema = UserSchema.omit({ password: true })
 
 const TokenResponseSchema = z.object({
   token: z.string().openapi({
@@ -59,13 +60,29 @@ const loginRoute = createRoute({
           schema: ErrorSchema
         }
       }
+    },
+    500: {
+      description: '服务器错误',
+      content: {
+        'application/json': {
+          schema: ErrorSchema
+        }
+      }
     }
   }
 })
 const app = new OpenAPIHono<AuthContext>().openapi(loginRoute, async (c) => {
-  const { username, password } = c.req.valid('json')
-  const result = await authService.login(username, password)
-  return c.json(result, 200)
+  try {
+    const { username, password } = c.req.valid('json')
+    const result = await authService.login(username, password)
+    return c.json(await parseWithAwait(TokenResponseSchema, result), 200)
+  } catch (error) {
+    console.error('登录失败:', error)
+    return c.json({
+      code: 500,
+      message: error instanceof Error ? error.message : '登录失败'
+    }, 500)
+  }
 });
 
 export default app