Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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 )

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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...

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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>';
	}
}
?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

E-mail Ta sendo enviado & Criando O Token:

63591e7d300444d8ae90e59172b6e3d3.png

c54754b4caff44a688c5e80aeadfdb43.png

Porem nao encontro nenhum erro na pagina de redefinir e o mesmo nao mostra nem que o token foi expirado ou o formulário :/

Compartilhar este post


Link para o post
Compartilhar em outros 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>


 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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 )

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Descomplica Consultoria
      Oi Pessoal, preciso de ajuda com um portfolio academico
    • Por 4Unknow
      Bom dia comunidade Imasters.

      Venho aqui tratar de um problema dúvida que estou tendo com um layout que estou tentando usar o formulário php dele.
      Quando clico em enviar ele me enviar para um arquivo .php  (assets/vendor/simple-forms/sendmail.php)

      Ele não envia o e-mail, acredito que deveria aparecer uma mensagem que o contato foi enviado corretamente.
      Vou deixar os arquivos aqui em anexo quem puder me ajudar nessa, ficaria muito grato.
       
      Link Website (wetransfer.com)
    • Por Dcdbbvb
      Faça um código que deverá ter uma matriz de qualquer tamanho(Você define o tamanho) no qual o usuário irá digitar os números que serão armazenados na matriz. Construa uma função que deverá somar todos os números digitados. No final o programa mostrará a matriz e o valor total da somatória.
       
      por favorrrr alguém me ajuda
    • Por lotthaus
      Alguém poderia fazer essa atividade para eu ajudar um amigo ?

    • Por Geralt96
      Bom dia. Alguém pode me dá uma ajuda pra desenvolver essa questão, por gentileza?

      Aqui está ela: https://projecteuler.net/problem=6

      A soma dos quadrados dos primeiros dez números naturais é: 1² + 2² + ... 10² = 385...
      O quadrado da soma dos dez primeiros números naturais é: (1+2+ ... 10)² = 55² = 3025...
      Portanto, a diferença entre a soma dos quadrados dos primeiros dez números naturais e o quadrado da soma é: 3025 - 385 = 2640.
      Encontre a diferença entre a soma dos quadrados dos primeiros cem números naturais e o quadrado da soma.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.