Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

implemetação de recuperação de senha

Boa noite,

Estou tentando implementar uma funcionalidade de recuperação de senha, estava olhando a maioria dos sites, e o mecanismo mais comum é o envio de um email com um link, acredito que único e temporário para a atualização da senha.

Mas como poderia fazer isso? estava procurando mais não achei nenhum um exemplo.

O que consegui pensar, foi fazer uma Url com a senha hash e mais algumas informações do usuário, mas como vou vincular isso com o usuário?

Posso deixar o controller como scopo request, mas quando ele clicar no link enviado por email, como vou saber de qual usuário se trata? e como vou fazer para meu servidor atender essa Url dinâmica ?

se alguém já fez essa implementação e puder ajudar, eu agradeço muito.

obrigado.

6 respostas
solução!

Boa noite Gabriel,

Creio que o modo mais fácil é vincular o hash com o usuário usando uma base de dados. Deste modo, ao receber o hash, você pode ver se ele foi gerado e se pertence a um dado usuário.

Se sim, pode informar ao servidor que a última parte da URL é o hash, usando o PathVariable.

Caso queira o mecanismo de recupereção de senha e mais coisas de segurança, vale dar uma olhada no Keycloak.

Avisa aí se deu certo ou ao menos uma luz.

Abraço.

Rafael Franco, obrigado pelas dicas consegui implementar, só mais um dúvida sabe como poderia fazer o link expirar depois de algum tempo?

obrigado pela ajuda.

Boa noite Gabriel,

De nada. Como você implementou? Digo para o pessoal que tiver a mesma dúvida ter algo mais concreto.

Sobre a expiração, também há políticas nesse sentido no Keycloak. Além disso, creio que dá pra você usar o JWT.

Abraço.

Então Rafael fiz mais uma coluna na tabela usuario para guardar o hash.

Quando eu cadastro o usuario eu faço o hash com o nome o email e a senha dele e guardo no BD.

Quando o usuario clica no link de "Esqueceu a senha", eu peço o email, com esse email busco no banco o Usuario e pego o hash de recuperação de senha e dai eu monto a URL para mandar por email.

Após isso eu monto a URL com a com o token no final:

"http://localhost:8080/importHair/recuperaSenha/token/?token="+ usuario.getHashRecovere();

e depois tenho um controller para atender essa request.

so uma observação, voce havia me aconselhado a montar a URL de forma dinâmica com a anotação @PathVariable mas pelo o que entendi ela não contém nada dentro, então troquei para a @RequestParam que trás o conteúdo dentro dela.

abraços.

Ah, bacana!

É, creio ser uma abordagem fácil e que resolve bem boa parte dos casos.

Na verdade, o PathVariable é parte da URL. Tanto que, no exemplo, ele fala em /{someId} como sendo a parte variável (que poderia ser o hash).

RequestParam você pode usar quando você usa os parâmetros na URL, como você acabou implementando. Funciona também.

Que bom que deu certo!

Abraço!

Compreendi melhor, como eu precisava do hash para fazer a consulta eu tinha que manda como parâmetro.

Abraço.