import { ExecutionContext, Injectable } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { PinoLogger } from 'nestjs-pino'; import { AccessPayload } from '../application/auth.types'; @Injectable() export class JwtAuthGuard extends AuthGuard('jwt') { constructor(private readonly logger: PinoLogger) { super(); } async canActivate(context: ExecutionContext): Promise { const allowed = await super.canActivate(context); const request = context .switchToHttp() .getRequest<{ user?: AccessPayload }>(); if (request.user?.sub) { this.logger.assign({ userId: request.user.sub }); } return Boolean(allowed); } }