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 Guss
      var carro = {
      cor = "azul",
      modelo = "fusca",
      marca = "Volwagen,
      kms = 10000,
      combustivel = "gasolina"
      }
       
    • By MateusOFCZ
      Olá, estou desenvolvendo um projeto de registro de clientes em java no netbeans e usando o MySQL Workbench e Xampp, gostaria de saber se é possível fazer com que o programa fique verificando se está conectado com o banco de dados, e caso não esteja ele mostra uma mensagem pedindo para o usuário se conectar em uma rede, caso ele se conecte o programa irá esconder essa mensagem e funcionará normalmente.

      Eu consegui fazer com que ele mostre se está conectado ou não, porém se eu desligar o servidor ele não atualiza mostrando que está offline, ele continua como online...
    • 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
×

Important Information

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