Salvando nova senha (se token for valido)
O usuário vai entrar na tela de nova senha e digitar ela e o backend vai conferir se o token ainda é valido.
Consulta para encontrar o token não expirado
Utilizaremos ela no PasswordRecoverRepository.
No AuthController:
Criaremos um PUT (afinal, iremos inserir uma nova senha).
A URL será "/new-password"
Retornará Void
O método criado (para o service) será "saveNewPassword"
@Valid e @RequestBody, passando um NewPasswordDTO (terá somente um String token e String password com critério de validação), veja:
Critérios de validação de senha:
Mínimo 8 caracteres e @NotBlank.
No AuthService:
No service, criar o método com Transactional e fazer a lógica, primeiro verificando se o token está expirado.
Se a lista que retornará do repository for igual a zero, lançaremos a exceção ResourceNotFoundException.
Se o token for válido, salvaremos a senha no banco.
O que vem de resultado nessa lista (advinda do PasswordRecover), ela possui como atributo o email do usuário, então faremos o seguinte:
Instanciaremos um usuário, e no
result.get(0)
(o primeiro token que chegou), podemos acessar o atributo com.getEmail()
Alocaremos isso em um findByEmail do userRepository
Pegaremos o usuário e daremos um
setPassword
, atualizando a sua senha. Como a senha é tem a criptografia, injetaremos o BCrypt (PasswordEncoder) lá em cimaApós isso, usar o
save
.
Para testar, só passar o NewPasswordDTO na URL "/auth/new-password" com o token + password. O token é o recoverToken (UUID) que chegará no email.
Atualizado