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/passporttambém possui outras estratégias, como login social baseado em OAuth.
Implementação
- A pasta
authconté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.