From 8fdc4e9365f16752048fd9bdd9dfe3f70fab6ec3 Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 5 Mar 2026 17:35:39 -0800 Subject: [PATCH] =?UTF-8?q?fix(ai-service):=20add=20JwtStrategy=20?= =?UTF-8?q?=E2=80=94=20resolves=20Unknown=20authentication=20strategy=20jw?= =?UTF-8?q?t=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/services/ai-service/src/ai.module.ts | 6 ++++++ .../infrastructure/strategies/jwt.strategy.ts | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 backend/services/ai-service/src/infrastructure/strategies/jwt.strategy.ts diff --git a/backend/services/ai-service/src/ai.module.ts b/backend/services/ai-service/src/ai.module.ts index 366a068..3e3961e 100644 --- a/backend/services/ai-service/src/ai.module.ts +++ b/backend/services/ai-service/src/ai.module.ts @@ -24,6 +24,9 @@ import { AiPricingService } from './application/services/ai-pricing.service'; import { AiAnomalyService } from './application/services/ai-anomaly.service'; import { AdminAgentService } from './application/services/admin-agent.service'; +// Infrastructure — auth +import { JwtStrategy } from './infrastructure/strategies/jwt.strategy'; + // Interface — HTTP controllers import { AiController } from './interface/http/controllers/ai.controller'; import { AdminAgentController } from './interface/http/controllers/admin-agent.controller'; @@ -46,6 +49,9 @@ import { AdminAgentController } from './interface/http/controllers/admin-agent.c { provide: AI_AGENT_CLIENT, useClass: AiAgentClient }, { provide: CONVERSATION_REPOSITORY, useClass: ConversationRepository }, + // Auth + JwtStrategy, + // Application services AiChatService, AiCreditService, diff --git a/backend/services/ai-service/src/infrastructure/strategies/jwt.strategy.ts b/backend/services/ai-service/src/infrastructure/strategies/jwt.strategy.ts new file mode 100644 index 0000000..6bfdbca --- /dev/null +++ b/backend/services/ai-service/src/infrastructure/strategies/jwt.strategy.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { ExtractJwt, Strategy } from 'passport-jwt'; + +@Injectable() +export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') { + constructor() { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + ignoreExpiration: false, + secretOrKey: process.env.JWT_ACCESS_SECRET || 'dev-access-secret', + }); + } + + async validate(payload: { sub: string; role: string; kycLevel: number; type: string }) { + return { id: payload.sub, role: payload.role, kycLevel: payload.kycLevel }; + } +}