current-user.decorator.ts 643 B

12345678910111213141516171819202122
  1. /**
  2. * @CurrentUser 参数装饰器 - 从 request 中提取已认证用户信息
  3. */
  4. import { createParamDecorator, ExecutionContext } from '@nestjs/common';
  5. import type { Request } from 'express';
  6. export interface JwtPayload {
  7. sub: string; // userId
  8. email: string;
  9. role: string; // user | admin
  10. }
  11. export const CurrentUser = createParamDecorator(
  12. (_data: unknown, ctx: ExecutionContext): JwtPayload => {
  13. const request = ctx.switchToHttp().getRequest<Request>();
  14. const user = request['user'];
  15. if (!user) {
  16. throw new Error('CurrentUser decorator used without JWT guard');
  17. }
  18. return user as JwtPayload;
  19. },
  20. );