A autenticação é um componente crucial em qualquer aplicação backend, garantindo que apenas usuários autorizados possam acessar determinadas funcionalidades e recursos. Sem uma autenticação adequada, a segurança da aplicação fica comprometida, expondo dados sensíveis e funcionalidades críticas a acessos indevidos.
Neste módulo, vamos entender como implementar a autenticação no nosso sistema de loja simples, utilizando ferramentas modernas como bcrypt para criptografar senhas e JWT (JSON Web Token) para gerenciamento de tokens de autenticação.
Organização Básica do Código para Autenticação
Para manter o código organizado e de fácil manutenção, é importante seguir uma estrutura clara. A seguir, apresentamos uma organização básica das pastas e responsabilidades de cada camada no processo de autenticação:
Controller: Define as rotas e lida com as requisições relacionadas à autenticação.
Service: Contém a lógica de negócio para autenticação, como verificação de credenciais.
Repository: Acessa diretamente o banco de dados para buscar ou armazenar informações de usuários.
Utils: Funções utilitárias, como criptografia de senhas.
Config: Configurações gerais, como chaves secretas para tokens.
Passos para Implementar a Autenticação
Vamos seguir um passo a passo para implementar a autenticação no nosso projeto:
1. Preparar as Rotas de Usuário
Primeiro, precisamos configurar os endpoints para cadastro e login dos usuários.
2. Criptografar Senhas com bcrypt
Para garantir a segurança das senhas dos usuários, utilizaremos a biblioteca bcrypt para criptografá-las antes de armazená-las no banco de dados.
Instalação do bcrypt:
Implementação das Funções de Criptografia:
3. Implementação do Controller de Autenticação
O controller lida com as requisições de cadastro e login, utilizando os serviços apropriados.
4. Implementação do Service de Autenticação
O service contém a lógica de negócio para cadastro e login dos usuários.
5. Implementação do Repository de Usuários
O repository acessa diretamente o banco de dados para buscar ou armazenar informações de usuários.
6. Atualização das Rotas no Servidor
Integrar as rotas de autenticação no servidor principal.
Fluxo de Autenticação
Cadastro de Usuário:
O usuário envia seus dados para o endpoint /auth/cadastro.
A senha é criptografada utilizando bcrypt.
Os dados do usuário são armazenados no banco de dados sem gerar um token.
Login:
O usuário envia suas credenciais para o endpoint /auth/login.
As credenciais são verificadas e, se válidas, um token JWT é gerado e retornado (a implementação completa do token será detalhada na página "Tokens e Segurança").