Redefinir senha
Tela onde a pessoa define uma nova senha depois de clicar no link recebido por e-mail em Recuperar senha.

Antes de começar
- Rota:
/:tenant/authorization/reset-password?token=<token>. - Componente:
ResetPasswordComponent(@pages/authentication/reset-password). - É preciso ter um
tokenválido na URL — ele vem do link do e-mail de recuperação e expira em 60 minutos. Sem token, a tela ainda abre normalmente (os campos aparecem), mas o envio é recusado do lado do próprio frontend (ver Estados e mensagens).
Permissões e acesso
Pública — o token na URL é a própria credencial de acesso a esta ação; não é preciso estar logado.
Caminho principal
- A pessoa chega aqui pelo link do e-mail (ou digita a URL manualmente com um
tokenválido). - Preenche Nova senha e Confirmação de senha.
- Clica em Alterar Senha.
- Em sucesso, o Portal mostra um toast de confirmação e volta para a tela de Login.
Este levantamento confirmou o estado funcional real da tela (formulário carregado com um token
válido, gerado de verdade a partir do fluxo de recuperação e obtido no Mailhog do ambiente) — ver
print no topo desta página. Para não invalidar a senha de uma conta de teste compartilhada por
outras pessoas do time, a submissão com esse token real não foi concluída nesta rodada; o
comportamento de sucesso abaixo vem da leitura do código (ResetPasswordComponent.applyResult,
caso completed), não de uma captura de tela.
| Resultado (por código, não capturado em tela) | Efeito |
|---|---|
completed | Toast de sucesso "Senha alterada" e redireciona para o login |
invalid_token | Toast de erro "Usuário não autorizado" |
invalid_password | Toast de aviso "Verifique os requisitos da senha" |
network_error / recoverable_error | Toast de erro genérico |
A confirmar — responsável: time de frontend; data: 24/09/2026.: captura de tela do toast de
sucesso real, sem gastar um token de uma conta de teste compartilhada.
Estados e mensagens
| Estado | Quando aparece | |
|---|---|---|
| Token real presente na URL | Chegando pelo link do e-mail | ![]() |
| Erro de validação de senha | Senha não cumpre a política, ou confirmação não confere | ![]() |
| Token ausente | Sem ?token= na URL, ao tentar enviar | ![]() |
Validações de frontend
| Campo | Regra | Mensagem |
|---|---|---|
| Nova senha | Obrigatória; entre 8 e 16 caracteres; exige maiúscula, minúscula, número e caractere especial (passwordStrengthValidator) | "A senha é obrigatória." / "A senha deve ter entre 12 e 16 caracteres." / "Pelo menos 1 letra maiúscula." / "Pelo menos 1 número." / "Pelo menos 1 caractere especial." |
| Confirmação de senha | Obrigatória; deve ser igual à nova senha (passwordMatchValidator) | "Confirmação de senha é obrigatória." / "As senhas não coincidem." |
| Token (não é um campo de formulário) | Precisa existir na URL | Toast "Não foi possível encontrar o token esperado! Realize o login novamente." ao tentar enviar sem token |
:::caution Divergência observada entre a mensagem e a validação do campo
A mensagem de erro exibida na tela diz "entre 12 e 16 caracteres", mas o FormControl da
Nova senha usa Validators.minLength(8) — ou seja, o campo aceita 8 caracteres no navegador,
mesmo com a mensagem sugerindo um mínimo de 12. A política real do backend também é de 8 a 16
caracteres (ver Recuperar, redefinir e trocar senha — API,
RN-04). A confirmar — responsável: time de frontend; data: 24/09/2026.: qual dos dois (mensagem
ou validador) está desatualizado.
:::
Validações e falhas de backend
| Situação | Onde é validada | Comportamento | Como se recupera |
|---|---|---|---|
| Token mal formado | POST /authentication/password/reset | 400 IDENTITY_RECOVERY_TOKEN_INVALID | Pedir um novo link em Recuperar senha |
| Token inexistente, expirado ou já usado | Mesmo endpoint | 401 IDENTITY_INVALID_RECOVERY_TOKEN | Pedir um novo link |
| Senha fora da política | Mesmo endpoint | 400 INVALID_PASSWORD | Ajustar a senha conforme os requisitos |
| Muitas tentativas em pouco tempo | Rate limit (5 requisições/60s) | 429 RATE_LIMIT_EXCEEDED | Aguardar e tentar novamente |
Regras de negócio
| ID | Regra | O que a tela reflete |
|---|---|---|
| RN-01 | Token de uso único | Depois de usado (ou de outro pedido de recuperação), o link antigo passa a ser inválido |
| RN-02 | Sem confirmação de senha no backend | A checagem de "senhas coincidem" é só de interface; o backend não recebe/valida um segundo campo |
| RN-03 | Sucesso zera o bloqueio de login | Ao trocar a senha por este fluxo, failedLoginAttempts da conta volta a zero |
Informações técnicas
Rota da tela: /:tenant/authorization/reset-password · Acesso: Público, mediante posse do
token
Rotas de API consumidas:
| Método | Rota | Quando é chamada |
|---|---|---|
| POST | /v1/authentication/password/reset | Ao clicar em Alterar Senha |
→ Detalhe da rota: Recuperar, redefinir e trocar senha — API
Relacionado
- ⚙️ API: Recuperar, redefinir e trocar senha — API
- 🔑 Passo anterior: Recuperar senha
- 🔑 Voltar: Login
- 📂 Módulo (back): Authentication — visão geral

