Browse Source

✨ feat(auth): add authentication middleware module

- 创建authMiddleware用于验证用户身份和权限
- 添加middleware目录及入口文件
- 在package.json中添加middleware导出配置
- 更新相关路由文件,使用本地authMiddleware替代共享模块

♻️ refactor(auth): optimize auth middleware imports

- 将路由文件中的authMiddleware导入路径从@d8d/shared-utils改为本地相对路径
- 在index.ts中导出middleware模块,便于外部使用
yourname 4 tuần trước cách đây
mục cha
commit
cbffd5bad8

+ 5 - 0
packages/auth-module/package.json

@@ -25,6 +25,11 @@
       "import": "./src/routes/index.ts",
       "require": "./src/routes/index.ts",
       "types": "./src/routes/index.ts"
+    },
+    "./middleware": {
+      "import": "./src/middleware/index.ts",
+      "require": "./src/middleware/index.ts",
+      "types": "./src/middleware/index.ts"
     }
   },
   "scripts": {

+ 2 - 1
packages/auth-module/src/index.ts

@@ -1,3 +1,4 @@
 export * from './services';
 export * from './schemas';
-export * from './routes';
+export * from './routes';
+export * from './middleware';

+ 38 - 0
packages/auth-module/src/middleware/auth.middleware.ts

@@ -0,0 +1,38 @@
+import { Context, Next } from 'hono';
+import { AuthService } from '../services';
+import { UserService } from '@d8d/user-module';
+import { AppDataSource } from '@d8d/shared-utils';
+import { AuthContext } from '@d8d/shared-types';
+import { parseWithAwait } from '@d8d/shared-utils';
+import { UserSchema } from '@d8d/user-module';
+
+export async function authMiddleware(c: Context<AuthContext>, next: Next) {
+  try {
+    const authHeader = c.req.header('Authorization');
+    if (!authHeader) {
+      return c.json({ message: 'Authorization header missing' }, 401);
+    }
+
+    const token = authHeader.split(' ')[1];
+    if (!token) {
+      return c.json({ message: 'Token missing' }, 401);
+    }
+
+    const userService = new UserService(AppDataSource);
+    const authService = new AuthService(userService);
+    const decoded = authService.verifyToken(token);
+
+    const user = await userService.getUserById(decoded.id);
+
+    if (!user) {
+      return c.json({ message: 'User not found' }, 401);
+    }
+
+    c.set('user', await parseWithAwait(UserSchema, user));
+    c.set('token', token);
+    await next();
+  } catch (error) {
+    console.error('Authentication error:', error);
+    return c.json({ message: 'Invalid token' }, 401);
+  }
+}

+ 1 - 0
packages/auth-module/src/middleware/index.ts

@@ -0,0 +1 @@
+export { authMiddleware } from './auth.middleware';

+ 1 - 1
packages/auth-module/src/routes/logout.route.ts

@@ -1,7 +1,7 @@
 import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
 import { z } from '@hono/zod-openapi';
 import { AuthContext } from '@d8d/shared-types';
-import { authMiddleware } from '@d8d/shared-utils';
+import { authMiddleware } from '../middleware';
 import { AppDataSource } from '@d8d/shared-utils';
 import { AuthService } from '../services';
 import { UserService } from '@d8d/user-module';

+ 1 - 1
packages/auth-module/src/routes/me.route.ts

@@ -1,6 +1,6 @@
 import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
 import { ErrorSchema } from '@d8d/shared-utils';
-import { authMiddleware } from '@d8d/shared-utils';
+import { authMiddleware } from '../middleware';
 import { AuthContext } from '@d8d/shared-types';
 import { UserSchema } from '@d8d/user-module';
 import { UserResponseSchema } from '../schemas';

+ 1 - 1
packages/auth-module/src/routes/update-me.route.ts

@@ -1,6 +1,6 @@
 import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
 import { ErrorSchema } from '@d8d/shared-utils';
-import { authMiddleware } from '@d8d/shared-utils';
+import { authMiddleware } from '../middleware';
 import { AuthContext } from '@d8d/shared-types';
 import { UserSchema, UpdateUserDto } from '@d8d/user-module';
 import { UserService } from '@d8d/user-module';