auth.middleware.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { Context, Next } from 'hono';
  2. import { AuthService } from '../modules/auth/auth.service';
  3. import { UserService } from '../modules/users/user.service';
  4. import { AppDataSource } from '../data-source';
  5. import { AuthContext } from '../types/context';
  6. import { parseWithAwait } from '../utils/parseWithAwait';
  7. import { UserSchema } from '../modules/users/user.schema';
  8. export async function authMiddleware(c: Context<AuthContext>, next: Next) {
  9. try {
  10. const authHeader = c.req.header('Authorization');
  11. if (!authHeader) {
  12. return c.json({ message: 'Authorization header missing' }, 401);
  13. }
  14. const token = authHeader.split(' ')[1];
  15. if (!token) {
  16. return c.json({ message: 'Token missing' }, 401);
  17. }
  18. const userService = new UserService(AppDataSource);
  19. const authService = new AuthService(userService);
  20. const decoded = authService.verifyToken(token);
  21. const user = await userService.getUserById(decoded.id);
  22. if (!user) {
  23. return c.json({ message: 'User not found' }, 401);
  24. }
  25. c.set('user', await parseWithAwait(UserSchema, user));
  26. c.set('token', token);
  27. await next();
  28. } catch (error) {
  29. console.error('Authentication error:', error);
  30. return c.json({ message: 'Invalid token' }, 401);
  31. }
  32. }