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á, 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