NestJS - Autenticação (Sistema de Login)

NestJS - Autenticação (Sistema de Login)

Introdução

Visão geral da seção: Nesta seção, Paulo Salvatore introduz o vídeo e fala sobre o que será abordado.

  • Paulo Salvatore apresenta-se e menciona que fará um vídeo sobre autenticação com Nest.js.
  • Ele menciona que já fez um vídeo semelhante antes, mas não estava satisfeito com algumas coisas.
  • Paulo Salvatore compartilha um link para a documentação e repositório do projeto.

Documentação e Repositório

Visão geral da seção: Nesta seção, Paulo Salvatore fala sobre a documentação e o repositório do projeto.

  • Paulo Salvatore menciona que há um arquivo Markdown disponível no repositório.
  • Ele incentiva os espectadores a sugerirem melhorias ao repositório público.
  • O palestrante destaca que a documentação é direcionada para autenticação pura e não cobre todos os exemplos possíveis.

Autenticação

Visão geral da seção: Nesta seção, Paulo Salvatore fala sobre autenticação em geral.

  • O palestrante usa o Miro para explicar o fluxo de login.
  • Ele enfatiza a importância de entender a relação entre front-end e back-end na aplicação.
  • Paulo Salvatore explica como implementar o Guardião das rotas para proteger informações sensíveis no back-end.

Fluxo de Autorização

Visão geral da seção: Nesta seção, Paulo Salvatore explica como funciona o fluxo de autorização.

  • O palestrante explica que o front-end precisa passar informações de autorização antes de acessar informações protegidas no back-end.
  • Ele menciona duas formas pelas quais o front-end pode fornecer informações de autorização: nome do usuário e senha ou token.
  • Paulo Salvatore destaca a importância de entender as necessidades específicas da aplicação ao implementar a autenticação.

Senha Secreta

Visão Geral da Seção: Nesta seção, o palestrante explica como funciona a autenticação de usuários usando uma "senha secreta" e um JWT (JSON Web Token).

Autenticação com JWT

  • O JWT é um mecanismo que aplica a todas as aplicações hoje em dia quando se fala de autorização.
  • A senha encriptada gerada pelo JWT não tem nada a ver com a senha do usuário. É gerado utilizando uma estratégia chamada JSON Web Token.
  • A autenticação é dividida em dois passos: geração do JWT e validação do JWT.

Geração do JWT

  • O processo começa com o preenchimento de um formulário pelo usuário no front-end, incluindo nome de usuário, senha ou e-mail.
  • Os dados são enviados para o back-end, onde são validados e usados para gerar um novo JWT com prazo de validade definido.
  • O front-end salva essa informação no navegador para uso futuro.

Validação do JWT

  • Quando o front-end faz uma nova requisição ao back-end, ele envia junto o token salvo anteriormente.
  • O back-end valida o token antes de processar a requisição. Isso inclui verificar se o token é válido, se foi gerado corretamente e se os dados estão corretos.

Utilizando Headers Para Autenticação

Visão Geral da Seção: Nesta seção, o palestrante explica como os headers são usados para enviar informações de autenticação.

Headers

  • O header é muito útil para enviar informações de autenticação.
  • O back-end recebe a requisição e extrai as informações do header. Ele usa uma senha secreta para garantir que apenas tokens válidos sejam aceitos.

Implementação de Autenticação com NestJS

Visão geral da seção: Nesta seção, o palestrante discute a implementação de autenticação em um projeto NestJS.

Mecanismo de Autenticação

  • O mecanismo de autenticação é implementado usando Guardiões.
  • Os Guardiões atuam em rotas específicas e podem ser aplicados na aplicação inteira.
  • As estratégias de autenticação são definidas pelos Guardiões e conectadas a eles.
  • A estratégia "local externa" é usada para gerar JWTs e já está disponível no pacote @nestjs/passport.
  • O pacote @nestjs/passport também possui outras estratégias, como login social baseado em OAuth.

Implementação

  • A pasta auth contém tudo o que é necessário para implementar autenticação em um projeto NestJS.
  • É possível copiar essa pasta para outro projeto e fazer algumas declarações adicionais para ativá-la.
  • A implementação usa o Prisma como sistema de banco de dados, mas pode ser facilmente adaptada para outros sistemas.

Dicas Finais

  • Leia o artigo sobre autenticação fornecido pelo palestrante antes de começar a implementar.
  • Use as pastas fornecidas pelo palestrante como boilerplate para sua própria implementação.

Preparando o Prisma

Visão geral da seção: Nesta seção, o palestrante explica como preparar o Prisma para uso no projeto.

Instalando e configurando o Prisma

  • Para instalar o Prisma, execute "npm install -D prisma" no terminal.
  • Inicialize o Prisma executando "npx prisma init".
  • Defina a URL do banco de dados no arquivo ".env", indicando que será um arquivo SQLite.
  • O esquema do Prisma é gerado automaticamente após a configuração.

Configurando o modelo de usuário

  • Crie um modelo para definir a identidade do usuário, incluindo email e senha.
  • Utilize um mecanismo de hash para armazenar as senhas com segurança.
  • O nome do usuário é opcional.

Criando uma rota de registro de usuário

Visão geral da seção: Nesta seção, o palestrante explica como criar uma rota para registrar usuários no sistema.

Criando a rota

  • Crie uma nova rota em seu controlador expresso para lidar com solicitações POST na rota "/register".
  • Extraia os dados enviados pelo cliente (nome, email e senha).
  • Use bcryptjs para criptografar a senha antes de armazená-la no banco de dados.

Validando entradas do usuário

  • Use Joi para validar as entradas do usuário antes de processá-las.
  • Certifique-se de que o email seja um endereço de email válido e a senha tenha pelo menos 8 caracteres.

Armazenando usuários no banco de dados

  • Use o Prisma para criar um novo usuário no banco de dados.
  • Verifique se o email já está em uso antes de criar um novo usuário.

Configurando o JWT Secret

Visão geral da seção: Nesta seção, é explicado como configurar o JWT Secret para garantir que os tokens gerados pelo back-end não possam ser burlados.

Configurando o JWT Secret

  • O JWT Secret é uma senha secreta usada para gerar o jwt.
  • É importante garantir que apenas essa senha seja utilizada para gerar o J deve ter a gente consiga garantir que ele foi gerado pelo back-end e as pessoas não conseguiram burlar o mecanismo.
  • Recomenda-se usar uma senha com muitos caracteres e diferente em cada ambiente (produção e desenvolvimento).
  • É importante tomar cuidado com essa senha, pois quem tiver acesso a ela pode gerar tokens válidos para a aplicação.

Migrando Banco de Dados

Visão geral da seção: Nesta seção, é explicado como migrar um banco de dados usando Prisma.

Migrando Banco de Dados

  • Para migrar um banco de dados usando Prisma, execute o comando "prisma migrate dev".
  • Certifique-se de que seu servidor de produção tenha uma senha atrelada ao banco de dados.
  • O arquivo de migration criará a tabela de usuários com as informações fornecidas.
  • O Prisma Client é essencial para garantir que tudo esteja funcionando corretamente.

Criando Módulo do Prisma

Visão geral da seção: Nesta seção, é explicado como criar um módulo do Prisma.

Criando Módulo do Prisma

  • Use a linha de comando "npx prisma generate" para gerar o módulo Prisma e o serviço Prisma.
  • Adicione o conteúdo do Prisma Service ao seu próprio arquivo de serviço.
  • O Prisma é configurado a partir do módulo Prisma e do arquivo de serviço.

Verificando Configuração do Prisma

Visão geral da seção: Nesta seção, é explicado como verificar a configuração do Prisma.

Verificando Configuração do Prisma

  • Use o comando "npx prisma studio" para verificar a configuração do Prisma.
  • Certifique-se de que o Prisma Client esteja instalado e funcionando corretamente.
Video description

Chegou a hora de implementar uma solução completinha de autenticação usando o Token JWT no NestJS! Acompanhe esse vídeo com o Sinapse Book: https://fabricadesinapse.gitbook.io/sinapse-book/nestjs/autenticacao-sistema-de-login-com-token-jwt Repositório no GitHub: https://github.com/FabricaDeSinapse/nestjs-auth ···················································································· ● Marcas de Tempo: 00:00 Intro 00:40 Entendendo o fluxo da autenticação 14:00 Preparando o acesso ao banco de dados 27:57 Instalando as dependências 33:09 Cadastro de usuários com senha criptografada 01:05:00 Criando a autenticação/login e gerando o JWT 02:03:26 Usando o JWT para proteger requisições 02:21:06 Incrementando a solução 02:32:00 Fino do fino ···················································································· ● Links Utilizados Documentação Authentication do Nest: https://docs.nestjs.com/security/authentication ···················································································· Se inscreva no canal e ative o sininho para não perder os próximos vídeos. Paulo Salvatore ● GitHub: https://github.com/paulosalvatore ● Instagram: https://www.instagram.com/paulo.salvatoree/ ● Twitter: https://twitter.com/paulosalvatoree ● Facebook: https://www.facebook.com/paulo.salvatoree ● LinkedIn: https://www.linkedin.com/in/salvatorepaulo/ Fábrica de Sinapse ● GitHub: https://github.com/FabricaDeSinapse/​ ● LinkedIn: https://www.linkedin.com/company/fabricadesinapse/ ···················································································· ► Todo o conteúdo criado por mim aqui no YouTube é 100% gratuito. Acredito que a educação deve estar disponível gratuitamente para todos e todas.