Sfoglia il codice sorgente

♻️ refactor(auth): 优化认证流程中的用户数据处理

- 创建AuthUserSchema,允许密码字段为空,适应认证场景需求
- 在auth中间件中使用AuthUserSchema替代UserSchema进行数据解析
- 更新Context类型定义,使用AuthUser作为用户数据类型
yourname 3 mesi fa
parent
commit
0dab61216a

+ 2 - 2
packages/server/src/middleware/auth.middleware.ts

@@ -4,7 +4,7 @@ import { UserService } from '../modules/users/user.service';
 import { AppDataSource } from '../data-source';
 import { AuthContext } from '../types/context';
 import { parseWithAwait } from '../utils/parseWithAwait';
-import { UserSchema } from '../modules/users/user.schema';
+import { AuthUserSchema } from '../modules/users/user.schema';
 
 export async function authMiddleware(c: Context<AuthContext>, next: Next) {
   try {
@@ -28,7 +28,7 @@ export async function authMiddleware(c: Context<AuthContext>, next: Next) {
       return c.json({ message: 'User not found' }, 401);
     }
 
-    c.set('user', await parseWithAwait(UserSchema, user));
+    c.set('user', await parseWithAwait(AuthUserSchema, user));
     c.set('token', token);
     await next();
   } catch (error) {

+ 7 - 0
packages/server/src/modules/users/user.schema.ts

@@ -173,6 +173,13 @@ export const UserListResponse = z.object({
 // 单个用户查询响应 schema
 export const UserResponseSchema = UserSchema.omit({password:true})
 
+// 认证专用的用户schema,允许密码字段为空
+export const AuthUserSchema = UserSchema.extend({
+  password: z.string().optional()
+});
+
+export type AuthUser = z.infer<typeof AuthUserSchema>;
+
 // 类型导出
 export type User = z.infer<typeof UserSchema>;
 export type CreateUserRequest = z.infer<typeof CreateUserDto>;

+ 2 - 2
packages/server/src/types/context.ts

@@ -1,8 +1,8 @@
-import { User } from "../modules/users/user.schema";
+import { AuthUser } from "../modules/users/user.schema";
 
 // 扩展Context类型
 export type Variables = {
-  user: User;
+  user: AuthUser;
   token: string;
 }