Jump to content
ewersonsv

[Sistema De Login] Como Fazer? Redefinição De Senha Por Link Temporário?

Recommended Posts

Olá :D eu mais umaa vez *--*

Eu tou querendo fazer um script que faz Redefinição De Senha Por Link Temporário "Valido por 1 ou 2 horas".

 

FORMULARIO (1);

<form action="" method="POST" enctype="multipart/form-data" role="form">
	<div class="form-group">
		<input name="email" type="email" id='email' class="form-control" value="<?php echo $email; ?>" placeholder="E-Mail" required>
	</div>
	<label class="checkbox" for="checkbox1">
		Lembrei? <a href="./sac/">Clique Aqui</a> <span class="pull-right">Ainda Não Tem Conta? <a href="./sac/registrar">Clique Aqui</a></span>
	</label>
  <hr>
	<center>
		<input type="submit" name="ok" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Recuperar" />
	</center>
</form>

CODIGO PHP FORM(1);

<?php
	//Colher E-Mail Do Form.
	$email = $_POST['email'];
	
	if($email <> ''){
			//Conexão Com A DB
			require 'config.php';
			//
			$sql = mysql_query("SELECT nome, email, senha FROM usuarios WHERE email='$email'") or die("Erro Ao Selecionar Os Dados."); 
			//
			$pesquisar = mysql_num_rows($sql);
			
			if($pesquisar <> 0){
				//Resultado da pesquisar Na DB
				$resultado = mysql_fetch_assoc($sql);
				
					$nome = $resultado['nome'];
					$email = $resultado['email'];
					//Não Sei COmo faz & Pega O Link
			
			//Destino onde o e-mail vai ser enviado
			$destinatario = $email;
			//Assunto Do Email.
			$assunto = "Recuperação De Senha - SistemaLogin";
			//Corpo DO E-Mail.
			$corpo 	= "Olá, Aqui está O Link Para Redefinir Sua Senha \n..";
			$corpo .= "Copie & Cole No Navegador Caso o Apertando Não Pega: ".$link." \n...";
			$corpo .= "Não Responda Este E-Mail, O Mesmo È Automatico";
			//Ativador HTML
			$headers  = "MIME-Version: 1.0\n" ;
			$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
			//Endereço Do Rementente
			$headers .= "From: SistemaLogin <no-reply@localhost>\n..";
			//Prioridade Do E-Mail
			$headers .= "X-Priority: 1 (Higuest)\n";

			if(mail($destinatar,$assunto,$corpo,$headers)){
				echo "E-Mail Enviado Com Sucesso!";
			}else{
				echo "E-Mail Invalido!";
			}
		}
			
	}else{
		echo 'Email Vazio!';
	}

?>

FORMULARIO (2);

 

Eu usei um de alterar a senha acho que server mais oque mais me preocupa e a parte do link e se o e-mail ai ta certo.... (e dps cuidarei da parte da alteração :D )

 

 

  • Gostei 2

Share this post


Link to post
Share on other sites

Crie o link temporário com a data de expiração, verifique se já expirou no momento que a pessoa acessar, pronto.

Share this post


Link to post
Share on other sites

Eu Nem Fiz O Link '-' eu nao sei fazer o tal link porem nao quero por aquele que diz "meusite.xxx/redefinir?id=ady9ad9ya8d78ad8ad87adya7"

 

quero por um: meusite.xxx/redefinir/ady9ad9ya8d78ad8ad87adya7

  • Gostei 2

Share this post


Link to post
Share on other sites

Quando houver a solicitação de redefinição, você gera um token e salva em um campo "validade" a data atual + duas horas, por exemplo:

$expira = date('Y-m-d H:i:s', strtotime("+2 hours"));

Aí você cria um arquivo que pegue o token na URL e pesquisa e compara se a data atual é maior que a data salva no banco, se for, quer dizer que expirou... bem simples.

A questão da URL, como o @ESerra disse, pesquise sobre URL's amigáveis

Share this post


Link to post
Share on other sites
5 minutos atrás, Mateus Silva disse:

Quando houver a solicitação de redefinição, você gera um token e salva em um campo "validade" a data atual + duas horas, por exemplo:


$expira = date('Y-m-d H:i:s', strtotime("+2 hours"));

Aí você cria um arquivo que pegue o token na URL e pesquisa e compara se a data atual é maior que a data salva no banco, se for, quer dizer que expirou... bem simples.

A questão da URL, como o @ESerra disse, pesquise sobre URL's amigáveis

pode me da uma explicação como seria o codigo da pagina onde vai ta ligado a tabela dos torken ?! :D

e quais tipo de campos usando na DB :D 

 

COMO SOU ESTUDANTE NESSA AREA AINDA NÃO SEI MUITA COISA E IA ME AJUDA MUITO!

 

Ficarei grato :D

  • Gostei 2

Share this post


Link to post
Share on other sites

Não precisa ser uma tabela de tokens, você simplesmente pode adicionar 2 campos à sua tabela de usuários: token(tipo varchar) e token_validade(tipo datetime), aí só dar update neles quando houver a requisição de troca de senha.

Share this post


Link to post
Share on other sites

agora tem que implementa para gerar os mesmo quando essa função de email a qual ta postada a cima ne?

e nesse caso essa propria função faz update com o torken e validade do mesmo na tabela de usuario certo?

 

pode me ajuda com esse codigo e me ensina ou me da uma base para como ficara a validação do torken caso nao ouver a alteração da senha pelo torken...

 

  • Gostei 1
  • +1 1

Share this post


Link to post
Share on other sites
2 horas atrás, MenoR disse:

agora tem que implementa para gerar os mesmo quando essa função de email a qual ta postada a cima ne?

e nesse caso essa propria função faz update com o torken e validade do mesmo na tabela de usuario certo?

 

pode me ajuda com esse codigo e me ensina ou me da uma base para como ficara a validação do torken caso nao ouver a alteração da senha pelo torken...

 

Uma coisa que você ainda não entendeu, o objetivo do fórum não é te dar código algum, nós vamos apenas te mostrar o caminho, se você deseja ou não percorre-lo é com você.

 

Comece do básico:

CRUD PHP MySQL PDO

 

Isso vai te mostrar como manipular dados com o BD, sem isto você não vai conseguir sair do lugar.

Share this post


Link to post
Share on other sites

Como o Serra disse, novamente, se você não tiver a base da base, que é o CRUD, vai ficar dificil de te AJUDAR, não da pra criar o sistema pra você, você tem que criar e a gente tá aqui pra te auxiliar!

Share this post


Link to post
Share on other sites

Eu consigo puxa o slug pelo link "localhost/redefinir/ZW1pY2ltZ55sdjE5QGdtY00sLmNvbE==

porem o form nao aparece e nem a mensagem caso o token esteja expirado.

 

<?php
	include "../config.php";


if(isset($_GET['slug'])){
	$slug = $_GET['slug'];
	$email_codigo = base64_decode($slug);

	$selecionar = mysql_query("SELECT * FROM `rtoken` WHERE slug = '$slug' AND data > NOW()");
	if(mysql_num_rows($selecionar) >= 1){
		if(isset($_POST['acao']) && $_POST['acao'] == 'mudar'){
			$nova_senha = md5(md5($_POST['novasenha']));

			$atualizar = mysql_query("UPDATE `usuarios` SET `senha` = '$nova_senha' WHERE `email` = '$email_codigo'");
			if($atualizar){
				$mudar = mysql_query("DELETE FROM `rtoken` WHERE slug = '$slug'");
				echo 'A senha foi modificada com sucesso!';
			}
		}
?>

    					<form action="" method="post" enctype="multipart/form-data">
							
    						<div class="form-group">
								<input name="novasenha" type="password" id='novasenha' class="form-control" value="" placeholder="Senha Nova" required>
							</div>
							
    						<div class="form-group">
								<input name="resenha" type="password" id='resenha' class="form-control" value="" placeholder="Confirma Senha Nova" required>
							</div>
    				 
    				  		<hr>
    				  	
    				  		<center>
								<input type="hidden" name="acao" value="mudar" />
								<input type="submit" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Refinir Senha" />
    				  		</center>

    					</form>
<?php
	}else{
		echo '<h1>Desculpe mais este link já expirou!</h1>';
	}
}
?>

 

 

  • Gostei 1
  • +1 1

Share this post


Link to post
Share on other sites
8 horas atrás, ESerra disse:

Se não está mostrando nada provavelmente exista algum erro que esteja resultando em uma tela em branco, ative a exibição de todos os erros:

https://forum.imasters.com.br/topic/542539-atenção-orientações-e-regras-do-fórum-de-php/

 

Ja Ativei, mais o mesmo nao relatar erro... :(

  • Gostei 1
  • +1 1

Share this post


Link to post
Share on other sites

Primeiro separe sua lógica de programação PHP do HTML, senão vira uma zona, a partir dai você estrutura os escopos "Blocos de IFs"

 

<?php
include "../config.php";

$erro = false;
$slug = isset($_GET['slug']) base64_decode($_GET['slug']) : false;


if ($slug !== false) {

	$selecionar = mysql_query(
		"SELECT * FROM `rtoken` WHERE slug = '$slug' AND data <= NOW()"
	);

	if(mysql_num_rows($selecionar) <= 0) {
		$erro = true;
		$mensagem = 'Desculpe mas este link já expirou!';
	}

	if(isset($_POST['acao']) && $_POST['acao'] == 'mudar'){

		$nova_senha = md5(md5($_POST['novasenha']));

		$atualizar = mysql_query("UPDATE `usuarios` SET `senha` = '$nova_senha' WHERE `email` = '$email_codigo'");
		if($atualizar){
			$mudar = mysql_query("DELETE FROM `rtoken` WHERE slug = '$slug'");
			$mensagem = 'A senha foi modificada com sucesso!';
		}

	}

}
?>

form


 

<?php
if($erro === true) {
    echo $mensagem;
}
?>
<form action="" method="post">
    <div class="form-group">
        <input name="novasenha" type="password" id='novasenha' class="form-control" value="" placeholder="Senha Nova" required>
    </div>
    <div class="form-group">
        <input name="resenha" type="password" id='resenha' class="form-control" value="" placeholder="Confirma Senha Nova" required>
    </div>
    <hr>
    <center>
        <input type="hidden" name="acao" value="mudar" />
        <input type="submit" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Refinir Senha" />
    </center>
</form>


 

 

Share this post


Link to post
Share on other sites
35 minutos atrás, Williams Duarte disse:

Primeiro separe sua lógica de programação PHP do HTML, senão vira uma zona, a partir dai você estrutura os escopos "Blocos de IFs"

 


<?php
include "../config.php";

$erro = false;
$slug = isset($_GET['slug']) base64_decode($_GET['slug']) : false;


if ($slug !== false) {

	$selecionar = mysql_query(
		"SELECT * FROM `rtoken` WHERE slug = '$slug' AND data <= NOW()"
	);

	if(mysql_num_rows($selecionar) <= 0) {
		$erro = true;
		$mensagem = 'Desculpe mais este link já expirou!';
	}

	if(isset($_POST['acao']) && $_POST['acao'] == 'mudar'){

		$nova_senha = md5(md5($_POST['novasenha']));

		$atualizar = mysql_query("UPDATE `usuarios` SET `senha` = '$nova_senha' WHERE `email` = '$email_codigo'");
		if($atualizar){
			$mudar = mysql_query("DELETE FROM `rtoken` WHERE slug = '$slug'");
			$mensagem = 'A senha foi modificada com sucesso!';
		}

	}

}
?>

form


 


<?php
if($erro === true) {
    echo $mensagem;
}
?>
<form action="" method="post">
    <div class="form-group">
        <input name="novasenha" type="password" id='novasenha' class="form-control" value="" placeholder="Senha Nova" required>
    </div>
    <div class="form-group">
        <input name="resenha" type="password" id='resenha' class="form-control" value="" placeholder="Confirma Senha Nova" required>
    </div>
    <hr>
    <center>
        <input type="hidden" name="acao" value="mudar" />
        <input type="submit" class="btn btn-primary btn-embossed btn-lg btn-wide" value="Refinir Senha" />
    </center>
</form>

 

Parse error: syntax error, unexpected 'base64_decode' (T_STRING) in /www/pg/redefinir.php on line 155 Call Stack: 0.0001 243464 1. {main}() /www/index.php:0

 

linha: 155 -> $slug = isset($_GET['slug']) base64_decode($_GET['slug']) : false;

 

----------------------------

mais um detalhe se eu por pra raiz: meusistema.xxx/redefinir.php?slug=TOKEN (funciona '-' )

Obs.: Da forma que citei que nao mostra o formulario  ( COMENTS )

 

  • Gostei 1
  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ShibuiFansub
      Boa tarde, tenho 18 anos e decidi criar meu primeiro blog, só por teste mesmo, acabei baixando dois template e acabei gostandos de ambos, tentei fazer uma "fusão" deles, mas meio que não consegui.
      Eu queria colocar o 'estilo de postagem' desse template: http://prntscr.com/o105rw
      Nesse daqui: http://prntscr.com/o108ad
      Download Template 1:  https://drive.google.com/file/d/1mhOCYgbwPIcO14wPwOumemBrCZR5l3fT/view
      Download Template 2:  https://drive.google.com/file/d/1QmohfY7MUZI4PTIQYkjbNRwxxWkfIflD/view
       
    • By Marlos.mendes
      Estou tentando indexar meu site no google para obter mais visitas, mas me deparo com o seguinte erro que não sei como resolver
      OBS: Site foi criado no google Sites e depois colocado no domínio que comprei
    • By ludlima
      Boa noite,estou tentando executar um algoritmo no visualg que leia 100 números,descubra se existe números primos,se sim mostrar em que posição se encontra. Entretanto,o programa só está executando até onde mostra o vetor. Gostaria de ajuda de como terminar e realizar a verificação do número primo.
      Var
        num, cont, divisor: inteiro
        VET: vetor[0..99] de inteiro

      Inicio
         escreval ("Olá!Você quer saber se existe número primo? ")
         Para num <- 0 ate 99 faca
            Escreva("Digite o ", num, "o. valor: ")
            Leia(VET[num])
         FimPara
      LimpaTela
         escreva ("Vetor: ")
         para num <- 0 ate 99 faca
            escreva (VET[num])
         fimpara
         escreval ("")
         
      cont <- 0
      divisor <- 1
         Para num <- 0 ate 99 faca
      cont <- cont + 1
      divisor <- divisor + 1
         se (divisor <= num)e(num mod divisor = 0)e (cont = 2) entao
         EscrevaL("Valor", VET[num], " na posicao [",num, "] é Primo!")
      fimse
      fimpara

      Fimalgoritmo
    • By ludlima
      Boa noite,estou tentando fazer um algoritmo que leia 50 números e mostre em ordem crescente e decrescente ao usuário,preciso utilizar vetor. Até agora só conseguir fazer a parte crescente. Alguém tem alguma dica de como fazer a parte decrescente?
       
      Var
      CONTADORA, CONTADORB: inteiro
      NUM, AUX: inteiro
      VET: vetor[0..49] de inteiro
      Inicio
         para CONTADORA de 0 ate 49 faca
         escreval ("Digite um número")
         leia (NUM)
         VET[CONTADORA] <- NUM
      fimpara
      para CONTADORA de 0 ate 48 faca
         para CONTADORB de CONTADORA + 1 ate 49 faca
            se VET[CONTADORA] > VET[CONTADORB] entao
               AUX <-VET[CONTADORB]
               VET[CONTADORB] <- VET[CONTADORA]
               VET[CONTADORA] <- AUX
            fimse
         fimpara
      fimpara
      escreval("A ordem crescente dos números é: ")
      para CONTADORA de 0 ate 49 faca
         escreva(VET[CONTADORA])
      fimpara
      Fimalgoritmo
       
    • By LoryF
      Preciso de Ajuda
       
      Eu estou fazendo um Curso de Desenvolvimento de Sistemas, que inclui a Pogramação WEB, sendo assim, tenho um trabalho para entregar amanhã, porém estou com um problemas, porque a imagem que eu coloquei no Section está sobrepondo o meu Header quando eu rolo a página. Qual comando posso utilizar para deixar ela em "segundo plano"?
      Obs: eu separei o section em duas div's ---> uma para a escrita (conteúdo) e outra para as imagens --->  a posição delas está correta, pois quero que fiquem lado a lado (conteudo à esquerda e imagens à direita)
       
      assim está o meu CSS
       
      header {
          position: fixed;
          bottom: 80%;
          background-color:black;
          color:white;
          text-align:center;
          width:90%;
          padding-top:2%; 
          padding-right:5%;
          padding-bottom:2%;
          padding-left:5%; 
      }
       
      section{
          position: relative;
          left: 17%;
          top: 20%;
          bottom: 50%;
          width:73%;
          float:left;
          height:auto;%;
          padding-top:2%; 
          padding-right:5%;
          padding-bottom:25%;
          padding-left:5%;
          /*1160*/
          /*1160+170=1330*/
      }
       
      #centro{
          position: absolute;
          width: 40%;
          height: auto%;
          margin: 0%;
          clear: both;
          float: left;
      }
       
      #image{
          position: relative;
          top: 30%;
          left: 50%;
          float: left;
          width: 40%;
          height: auto%;
          clear: both;
      }
       
      img{
          float: left;
      }
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.