import { ExtractJwt, Strategy } from 'passport-jwt'; import { PassportStrategy } from '@nestjs/passport'; import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; // Interface สำหรับ Payload ใน Token interface JwtPayload { sub: number; username: string; } import { UserService } from '../../modules/user/user.service.js'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { constructor( configService: ConfigService, private userService: UserService, ) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, secretOrKey: configService.get('JWT_SECRET')!, }); } async validate(payload: JwtPayload) { const user = await this.userService.findOne(payload.sub); if (!user) { throw new Error('User not found'); } return user; } }