LazyPHP

Informar bugs e fazer sugestões

Voltar para o índice do fórum

Ver outros tópicos de 'Informar bugs e fazer sugestões'

Ajustes em relação a validade de email no reset de senha [LoginController]
Weslley

3 anos atrás atrás - 07/05/2016

1. A geração e-mail de reset de senha, assim como a verificação de tempo de validade do e-mail, estão sendo realizadas utilizando o formato "Ymdhi" de data.

$d = new DateTime();
$agora = $d->format('Ymdhi');
Porém, tal formato valida a hora no formato 12hrs e não 24hrs. Para ficar correto, ajuste para o formato "YmdHi".

  $d = new DateTime();
  $agora = $d->format('YmdHi');
2. A validação de tempo do e-mail não funciona quando o e-mail é gerado às 16:56 hrs e o usuário tenta acessar o link às 17:06 hrs, por exemplo. Neste caso, criei uma função (bem porcamente) para calcular esse intervalo: OBS: O link pode durar no máximo dias.

<?php

    # Tempo de validade do email em minutos:
    private $tempoemail = 30;
	
    function reset() {	
        try {
            $d = new DateTime();
            $agora = $d->format('YmdHi');
            $data = str_replace(Config::get('salt'), '', urldecode(Cript::decript($_GET['d'])));
			
	    $expirado = $this->calculaTempo($data, $agora);

            if($expirado){
                throw new Exception('Este link expirou. Solicite novamente sua senha');
                $this->go('Login', 'login');
            }
		//CONTINUA O FUNÇÃO...
		}
	}
	
	public function calculaTempo($data, $agora) {
		$data1 = new DateTime($data);
		$data2 = new DateTime($agora);
		$intervalo = $data1->diff($data2);

		$diferencasegundos = $intervalo->format('%y') * ($this->tempoemail*60+1);
		$diferencasegundos += $intervalo->format('%m') * ($this->tempoemail*60+1);
		$diferencasegundos += $intervalo->format('%d') * 86400;
		$diferencasegundos += $intervalo->format('%h') * 3600;
		$diferencasegundos += ($intervalo->format('%i'))* 60;

		if ($diferencasegundos > ($this->tempoemail*60)){
			$linkexpirado = true;
		}
		else {
			$linkexpirado = false;
		}

		return $linkexpirado;
	}
?>
Healfull

3 anos atrás atrás - 13/05/2016

Miguel ta sumido... (muita praia?). Mas como dito, basta alterar o formato da data para que a comparação fique correta mesmo (para o padrão de meia hora). Com relação a função, acho que da para tirar o argumento $agora e criar a data dentro do método mesmo, pois evitaria códigos desnecessários em caso de reutilização da função em outros pontos do sistema. Dê uma olhada na função strtotime() do PHP, com ela da para fazer algumas comparações de datas de forma mais sucintas (existem vários exemplos no pai Google). Obrigado pela contribuição.

Voltar para o índice do fórum

Ver outros tópicos de 'Informar bugs e fazer sugestões'