Olá, Como vai? Gostaria de saber como criar um link temporário para recuperação de senha no codeInigter, o qual seria enviado para o email de quem esqueceu a senha e deseja criar uma nova. Muito Obrigado!!!
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá, Como vai? Gostaria de saber como criar um link temporário para recuperação de senha no codeInigter, o qual seria enviado para o email de quem esqueceu a senha e deseja criar uma nova. Muito Obrigado!!!
Olá, Charly.
Crie uma tabela, por exemplo:
CREATE TABLES password_reset (
id int not null auto_increment primary key,
token varchar(255) not null,
created_at datetime not null
);
Após crie a classe responsável por gerenciar esse token, por exemplo:
class token
{
/**
* $string pode ser passado e-mail + y-m-d H:i:s + rand(1, 999999999). Apensa um exemplo para hash único
*/
public function create($string) : string
{
return password_hash($string, PASSWORD_DEFAULT);
}
/**
* $entityManager (Exemplo tomando como base o Doctrine)
* $toke A string recebida na request (da url do e-mail)
*/
public function validate($entityManager, $token) : bool
{
$data = $entityManager->findByToken($token);
$dateStart = new \DateTime($data->getCreatedAt() );
$dateNow = new \DateTime(date('Y-m-d'));
$dateDiff = $dateStart->diff($dateNow);
return $dateDiff->days >= 1;
}
}Com isso você pode controlar se o intervalo deve ser maior que 1 dia ou o que você desejar, pois pode ser um parâmetro configurado no banco de dados e retornado para a validação.
Espero ter lhe auxiliado.
Att,
Obrigado Diego Brocanelli pela ajuda, foi útil. Mas a dúvida principal é como gerar um link, o qual será enviado para o e-mail do usuário, quel quando clicado abrirá uma página para troca de senha.
Olá, Charly.
Para montar o link você utilizará a tag a, com ela podemos montar dinamicamente o link, veja exemplo abaixo:
// coletamos o schema, Ex: http ou https
$schema = filter_input(INPUT_SERVER, 'REQUEST_SCHEME') ;
// coletamos o host, EX: www.meu-site.com
$host = filter_input(INPUT_SERVER, 'HTTP_HOST') ;
// O token de validação
$token = 'a1cbas23asda4rt5w6ut';
// montamos o link, Ex: http://www.meu-site.com/reset/password/token/a1cbas23asda4rt5w6ut
$link = "{$schema}://{$host}/reset/password/token/{$token}";Após montagem do link basta inserir o mesmo no template html no qual você utiliza para disparo do e-mail.
<a href="<?= $link; ?> ">Observação: O melhor será você utilizar um template engine, para que não insira PHP em seu HTML :)
Espero ter dado alguma luz para sua dúvida.
Att,
Diego Brocanelli