UNPKG

nest-authify

Version:

Complete authentication and authorization package for NestJS - Monolith and Microservices ready with OAuth, JWT, Redis sessions

45 lines (38 loc) 1.26 kB
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { AuthMsClientService } from '../microservices/auth-ms-client.service'; @Injectable() export class MicroserviceJwtAuthGuard implements CanActivate { constructor( private authMsClient: AuthMsClientService, private reflector: Reflector, ) { } async canActivate(context: ExecutionContext): Promise<boolean> { const isPublic = this.reflector.getAllAndOverride<boolean>('isPublic', [ context.getHandler(), context.getClass(), ]); if (isPublic) { return true; } const request = context.switchToHttp().getRequest(); const token = this.extractTokenFromHeader(request); if (!token) { return false; } try { const payload = await this.authMsClient.validateToken(token); if (payload.error) { return false; } request.user = payload; return true; } catch { return false; } } private extractTokenFromHeader(request: any): string | undefined { const [type, token] = request.headers.authorization?.split(' ') ?? []; return type === 'Bearer' ? token : undefined; } }