import { CanActivate, ExecutionContext, Inject, Injectable, } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; import { Request, Response } from 'express'; import { lastValueFrom } from 'rxjs'; @Injectable() export class AuthGuard implements CanActivate { constructor(@Inject('auth') private authClient: ClientProxy) {} async canActivate(context: ExecutionContext): Promise { const request = context.switchToHttp().getRequest() as Request; const response = context.switchToHttp().getResponse() as Response; if (!request.headers.authorization) return false; // Verify token by auth microservice const [, token] = request.headers.authorization.split(' '); const user = await lastValueFrom( this.authClient.send('auth.verify', { token }), ); // Add token contents to locals response.locals.user = user; return true; } }