DEV Community

Cover image for NestJS Microservice de Autenticação parte 1
Alexandre E. Souza
Alexandre E. Souza

Posted on

NestJS Microservice de Autenticação parte 1

Inicialmente vamos criar nosso Microservice onde sera chamado a requisição para autenticar o usuário.

Para isso vamos usar o seguinte comando nest new app-auth, essa sera nosso que sera nosso microservice onde iremos registar e autenticar os usuários configurar nosso bootstrap no main.ts.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Transport } from '@nestjs/microservices';

async function bootstrap() {
  const { listen } = await NestFactory.createMicroservice(AppModule, {
    transport: Transport.TCP,
  });
  await listen(() => console.log('Auth Service Up'));
}
bootstrap();
Enter fullscreen mode Exit fullscreen mode

vamos usar o TCP mas poderia estar usando kafka ou nats-server(prefiro), vamos criar nosso service onde ficará nossos métodos a ideia é seguir o conceito da arquitetura SOLID que o NestJS nos da inicialmente deixando de forma clara que podemos usar outros padrões de arquitetura dentro do projeto.

para criar nosso service usamos o comando dessa

nest g service

forma ele ira criar o service para usarmos, é interessante ressaltar que em um microservice podemos ter vários services porem não pode fugir da ideia que um microservice como o próprio nome diz é algo especialista.

Vamos criar uma interface antes de criar os métodos em nosso service, então criaremos uma pasta interfaces e dentro dela a seguinte interface.

export interface UserInterfaces {
  name: string;
  email: string;
  password: string;
}

Enter fullscreen mode Exit fullscreen mode

Nosso service ficara da seguinte forma.

import { Injectable } from '@nestjs/common';
import { UserInterfaces } from '../interfaces/user.interfaces';

@Injectable()
export class UserService {
  private readonly users: UserInterfaces[] = [];

  create(user: UserInterfaces) {
    this.users.push(user);
  }

  find(email: string, password: string): UserInterfaces {
    return this.users.find(
      (Users) => Users.email === email && Users.password === password,
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

Vamos deixar a interação com array, futuramente iremos trocar por uma interação com o mongodb, dessa forma também podemos entender que independente do banco de dados utilizado o impacto na aplicação é minimizado.

Vamos agora ao nosso controller, onde a magica tem que acontecer.

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { EventPattern } from '@nestjs/microservices';
import { UserInterfaces } from './interfaces/user.interfaces';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @EventPattern('register')
  register(user: UserInterfaces) {
    console.log('Users', user);
  }

  @EventPattern('login')
  login(email: string, password: string) {
    console.log('Email', email);
  }
}
Enter fullscreen mode Exit fullscreen mode

Agora temos nosso microservice de auth estruturado na parte 2 vamos criar a interação do cliente consumindo esses métodos e vamos validar se esta tudo okay.

"Funcionando"

Top comments (0)