US1.3
Autenticação de Usuários (RF03)
História de Usuário
Como usuário (estudante, organização ou administrador), quero fazer login na plataforma de forma segura para acessar funcionalidades específicas do meu perfil.
Rastreabilidade
| Item | Código / Referência |
|---|---|
| User Story | US1.3 |
| Requisito Funcional | RF03 — Autenticar usuário: Garantir o acesso seguro à plataforma via login e senha. |
| Característica de Produto | CP01 — Gestão de Usuários e Entidades |
| Requisitos Não-Funcionais | RNF01 (Criptografia de senhas), RNF02 (Tempo de resposta ≤ 2s) |
| Release Planejada | R1 — Fundação (26/05/2026) |
Descrição
O Liaison é uma plataforma com três perfis distintos: estudantes, organizações sociais e administradores (Sysmin). Cada perfil possui funcionalidades exclusivas e dados sensíveis. Para garantir segurança e personalização da experiência, é necessário um mecanismo de autenticação robusto que valide credenciais (e-mail e senha) e redirecione o usuário para o fluxo correto conforme seu perfil. O sistema deve ser resiliente a tentativas de acesso indevido, não revelando qual campo está incorreto em caso de falha, e deve responder rapidamente (≤ 2s) para não comprometer a experiência mobile-first.
Alcance: Full-stack — formulário de login no frontend (React Native/Expo), API de autenticação no backend (Django REST Framework + JWT), e validação de credenciais criptografadas no banco (PostgreSQL).
Critérios de Aceite (BDD / Gherkin)
Cenário 1: Login bem-sucedido com redirecionamento por perfil
Dado que o usuário possui uma conta ativa com e-mail e senha cadastrados Quando ele preenche o formulário de login com credenciais válidas e submete Então o sistema autentica o usuário e o redireciona para a tela inicial correspondente ao seu perfil (estudante, organização ou administrador)
Cenário 2: Falha de autenticação com mensagem genérica
Dado que o usuário está na tela de login Quando ele insere um e-mail ou senha incorretos e submete Então o sistema exibe a mensagem genérica "E-mail ou senha inválidos" sem indicar qual campo está incorreto, e não concede acesso
Cenário 3: Tentativa de acesso com conta inativa
Dado que existe uma conta cadastrada cujo acesso não está liberado (ex.: organização aguardando moderação) Quando o usuário tenta autenticar-se com as credenciais dessa conta Então o sistema informa que a conta não está ativa, sem detalhar o motivo
Cenário 4: Tempo de resposta dentro do limite aceitável
Dado que o servidor está em condições normais de rede e carga Quando o usuário submete o formulário de login Então o sistema responde em no máximo 2 segundos (RNF02)
Regra DoR-G02: Todo item de backlog deve conter pelo menos um cenário de aceitação estruturado no formato Dado / Quando / Então.
Regras de Negócio
- Acesso restrito a contas ativas: Somente usuários cuja conta esteja em situação regular e ativa podem autenticar-se na plataforma.
- Autenticação por e-mail e senha: O acesso ao sistema é controlado exclusivamente por meio de e-mail e senha cadastrados.
- Proteção contra enumeração de contas: Em caso de falha na autenticação, o sistema não deve revelar se o e-mail informado está cadastrado ou se a senha está incorreta. A mensagem exibida deve ser genérica e idêntica em ambos os casos.
- Redirecionamento por perfil: Após autenticação bem-sucedida, o usuário deve ser direcionado às funcionalidades correspondentes ao seu tipo de perfil — estudante, organização social ou administrador.
- Conta inativa: Caso a conta exista mas não esteja liberada para acesso (ex.: cadastro de organização pendente de moderação), o sistema deve informar que o acesso não está disponível, sem expor o motivo específico da inativação.
Requisitos Técnicos
- Backend: Endpoint
POST /api/v1/auth/login/utilizandoTokenObtainPairViewdodjangorestframework-simplejwtcomemailcomoUSERNAME_FIELD. - Backend: Serializer customizado para incluir o perfil do usuário (student/organization/admin) no payload do token JWT.
- Backend: Renovação de sessão via refresh token com tempo de expiração superior ao token de acesso, dispensando nova digitação de credenciais.
- Backend: Hashing de senha via
django.contrib.authcom algoritmo irreversível (PBKDF2 + bcrypt), conforme RNF01. - Backend: Testes unitários e de integração com pytest, cobertura mínima de 80%.
- Backend: Configuração global
DEFAULT_PERMISSION_CLASSES = [IsAuthenticated]; endpoint de login com permissão explícitaAllowAny. - Frontend: Tela de login em React Native + Expo, com campos controlados e validação de formato de e-mail antes do envio.
- Frontend: Armazenamento seguro dos tokens de autenticação no dispositivo (ex.:
expo-secure-store). - Frontend: Redirecionamento condicional após login baseado no perfil retornado pelo backend.
Referências de Design
- Protótipo Figma (Desktop): https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=0-1&p=f&t=lTwljNNcyUQi1AQz-0
- Protótipo Figma (Mobile): https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=0-1&p=f&t=lTwljNNcyUQi1AQz-0
Regra DoR-G06: Para tarefas que envolvem frontend, o link do protótipo (Figma) deve estar anexado à tarefa.
Dependências
- Relacionada a: #12 (US1.1 / RF01 — Cadastro de Estudantes) — Necessário para dispor de credenciais de estudantes em testes de integração.
- Relacionada a: #13 (US1.2 / RF02 — Cadastro de Organizações) — Necessário para dispor de credenciais de organizações em testes de integração.
- Tipo de dependência: Soft (conforme backlog §10.2.3 — item #4, prof. 0). O endpoint de autenticação pode ser desenvolvido e testado com dados simulados (mocks/fixtures) em paralelo com #12 e #13. A integração completa depende dos cadastros.
- Bloqueia: #18 (US1.7 / RF06 — Painel Administrativo Sysmin) — O acesso administrativo exige autenticação prévia.
Notas
- Prioridade no backlog (§10.2.3): #4 Must Have, ICE=900 (I=10, C=10, E=9), Quick Win, prof. 0. Item fundacional — sem impedimentos para iniciar.
- A configuração de
emailcomoUSERNAME_FIELDexige queREQUIRED_FIELDSincluausernamepara quecreatesuperuserfuncione corretamente (PROJECT_CONTEXT.md §10). TokenObtainPairViewdo simplejwt utilizaemailautomaticamente quandoUSERNAME_FIELD = 'email'— não requer serializer customizado para o campo, apenas para inclusão do perfil no payload.- Em ambiente de desenvolvimento mobile,
ALLOWED_HOSTS=*é aceitável somente comDEBUG=True.
Definição de Preparado (DoR)
| Item de Verificação (Universal) | Evidência / Rastreabilidade | Situação |
|---|---|---|
| A história está bem descrita e com critérios de aceite? | Documentada e alinhada com o escopo do MVP. | ✔ Sim |
| Possui protótipos de interface necessários? | Interface mapeada e disponível no Figma da equipe. | ✔ Sim |
| A história é independente o suficiente para ser entregue? | Cadeia de dependências resolvida (vide Matriz MVP). | ✔ Sim |
| Foi estimada pela equipe? | Estimada utilizando o método ICE Score. | ✔ Sim |
Definição de Pronto (DoD)
| Pergunta Fundamental (Universal) | Evidência de Implementação | Status |
|---|---|---|
| O código foi implementado e revisado? | Pull Request aprovado e fundido na branch principal. | ✔ Sim |
| Coerente com o protótipo validado? | O layout segue os componentes e tokens de design. | ✔ Sim |
| Passou nos testes necessários? | Testes (unitários/integração) executados e aprovados. | ✔ Sim |
| A documentação está atualizada? | Atualizada no repositório de requisitos. | ✔ Sim |
Critérios de Aceitação (CA)
- Login com sucesso: O usuário informa e-mail e senha corretos e é redirecionado para a tela correta de acordo com seu tipo de conta (estudante vai para o feed de vagas, organização vai para o painel de vagas, administrador vai para o painel de moderação).
- Credenciais erradas: Se o e-mail ou a senha estiverem incorretos, o sistema exibe a mensagem genérica "E-mail ou senha inválidos" — sem revelar qual dos dois está errado — e não permite o acesso.
- Conta inativa: Se a conta existir, mas ainda não estiver liberada (ex.: organização aguardando moderação), o sistema informa que o acesso não está disponível, sem detalhar o motivo.
- Resposta rápida: O login responde em até 2 segundos em condições normais de uso.
Acesso & Evidência
- Código Homologado: Repositório Principal
- Status de Conclusão: 100% Entregue (conforme Matriz de Completude).