2
0

auth.middleware.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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 { DisabledStatus, DeleteStatus } from '@/share/types';
  7. export async function authMiddleware(c: Context<AuthContext>, next: Next) {
  8. try {
  9. const authHeader = c.req.header('Authorization');
  10. if (!authHeader) {
  11. return c.json({ message: 'Authorization header missing' }, 401);
  12. }
  13. const token = authHeader.split(' ')[1];
  14. if (!token) {
  15. return c.json({ message: 'Token missing' }, 401);
  16. }
  17. const userService = new UserService(AppDataSource);
  18. const authService = new AuthService(userService);
  19. const decoded = authService.verifyToken(token);
  20. const user = await userService.getUserById(decoded.id);
  21. if (!user) {
  22. return c.json({ message: 'User not found' }, 401);
  23. }
  24. // 检查用户状态
  25. if (user.isDisabled === DisabledStatus.DISABLED) {
  26. return c.json({ message: 'User is disabled' }, 403);
  27. }
  28. if (user.isDeleted === DeleteStatus.DELETED) {
  29. return c.json({ message: 'User not found' }, 401);
  30. }
  31. c.set('user', user);
  32. c.set('token', token);
  33. await next();
  34. } catch (error) {
  35. console.error('Authentication error:', error);
  36. return c.json({ message: 'Invalid token' }, 401);
  37. }
  38. }