import { Injectable, UnauthorizedException } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { UserRole } from '@prisma/client'; import { ExtractJwt, Strategy } from 'passport-jwt'; import { PrismaService } from '../../prisma/prisma.service'; import { AuthUser } from '../auth.types'; type JwtPayload = { sub: string; role: UserRole; }; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') { constructor( config: ConfigService, private readonly prisma: PrismaService, ) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, secretOrKey: config.getOrThrow('JWT_ACCESS_SECRET'), }); } async validate(payload: JwtPayload): Promise { const user = await this.prisma.user.findUnique({ where: { id: payload.sub }, }); if (!user || user.disabled) { throw new UnauthorizedException('نشست نامعتبر است'); } return { id: user.id, cellNumber: user.cellNumber, role: user.role, firstName: user.firstName, lastName: user.lastName, title: user.title, }; } }