v beta-2.0.1 Released

Fluxo de Login e Autenticação via WhatsApp

05 de janeiro de 2026
beta-2.0.1
Time Técnico NexarSystems

O NexarGrid implementa um sistema de autenticação robusto e moderno, priorizando a segurança e a facilidade de uso para os profissionais de saúde. O fluxo principal utiliza autenticação de dois fatores (2FA) com envio de tokens OTP (One-Time Password) via WhatsApp, integrado através da API da Twilio.

# Visão Geral do Processo

O processo de login é composto por duas etapas principais:

  1. Identificação e Validação de Credenciais: O usuário fornece e-mail e senha.
  2. Verificação de Segundo Fator (2FA): Um código OTP é enviado para o WhatsApp cadastrado do usuário e deve ser validado para liberar o token de acesso JWT.
Gerando diagrama...

# Detalhes da Implementação

# 1. Serviço de Autenticação (auth.service.js)

Este serviço atua como a autoridade central para geração e validação de tokens e OTPs.

  • Geração de OTP:
    • Utiliza um gerador numérico de 6 dígitos.
    • Armazena o código no Redis com uma chave padrão auth:otp:{userId}.
    • Define um TTL (Time-To-Live) de 180 segundos (3 minutos) para expiração automática.
  • Validação de OTP:
    • Recupera o código do Redis.
    • Compara com o código fornecido pelo usuário.
    • Se válido, remove imediatamente a chave do Redis para garantir que o OTP seja utilizado apenas uma vez (prevenção contra ataques de replay).

# 2. Serviço de Pessoas (people.service.js)

Gerencia os dados dos usuários e orquestra a comunicação com provedores externos.

  • Integração Twilio:
    • Utiliza a biblioteca oficial twilio para Node.js.
    • Envia mensagens através de templates pré-aprovados pelo WhatsApp (Content SID: HXb7cbd0627b4d80da94d6322024519a5b).
    • O corpo da mensagem é dinâmico, inserindo o código OTP gerado.
    • Fallback: O sistema possui suporte para envio via SMS caso o WhatsApp falhe, embora o WhatsApp seja o canal primário.

# 3. Segurança

  • Senhas: Armazenadas como hashes utilizando bcrypt com salt gerado automaticamente.
  • Tokens de Acesso: Utiliza JWT (JSON Web Tokens) assinados com um segredo (JWT_SECRET). O token tem validade de 2 horas e contém o ID do usuário, e-mail e roles (permissões).
  • Mocking em Desenvolvimento: Para facilitar testes e desenvolvimento sem custos de API, o sistema pode ser configurado para usar um número de telefone “mock” ou retornar o OTP diretamente na resposta da API em ambientes não-produtivos.

# Configuração Necessária

Para que o fluxo funcione corretamente, as seguintes variáveis de ambiente devem estar configuradas no arquivo .env ou no orquestrador de containers:

Variável Descrição Exemplo
TWILIO_ACCOUNT_SID ID da conta Twilio AC6b00cc...
TWILIO_AUTH_TOKEN Token de autenticação Twilio 4474c0fa...
TWILIO_PHONE_NUMBER Número remetente (Sender) +16363063149
REDIS_HOST Host do servidor Redis localhost
REDIS_PORT Porta do servidor Redis 6379
JWT_SECRET Chave secreta para assinatura de tokens S3cr3tK3y...

# Tratamento de Erros Comuns

  • OTP Expirado: Se o usuário demorar mais de 3 minutos, o código é removido do Redis. A validação retornará isValid: false com razão expired_or_not_found. O frontend deve solicitar um novo envio.
  • Número Inválido: Se o número cadastrado não for um WhatsApp válido, a API da Twilio retornará erro, que é capturado e logado pelo people.service.
  • Falha no Redis: Se o serviço de cache estiver indisponível, a geração de OTP falhará, impedindo o login. O monitoramento do Redis é crítico para a disponibilidade do serviço.