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
text/typescript
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { AuthMsClientService } from '../microservices/auth-ms-client.service';
()
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;
}
}