Colegas, boa tarde. Estou criando um sisteminha de login, e estou na parte de recuperação de senha. Escrevi o código para o usuário digitar o e-mail cadastrado e solicitar a redefinição. Então, ele recebe um link único no e-mail dele e, por meio desse link, abre a página de criar nova senha.
Tudo funciona. O cadastro, o login, e a alteração de senha. Exceto por um problema. Quando faço uma recuperação de senha, e retorno para a página de login, ele dá a nova senha como inválida. Aí, se eu fechar o navegador e abrir de novo, e digitar a nova senha, ele entra normalmente. E não funciona ctrl+F5. Tem que fechar e abrir.
Não faço ideia do que pode estar causando isso.
Vou postar meu código:
Página de Login:
<?php
include_once 'connect.php';?><!DOCTYPE html><htmllang="pt-br"><head><metacharset="UTF-8"><metaname="viewport"content-"width=device-width, initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Login</title><style>
body{font-family: Arial, Helvetica, sans-serif}.content{display:flex;justify-content: center}.contato{width:100%;max-width:500px;}.form{display: flex;flex-direction: column}.field{padding:10px;margin-bottom:15px;border:1px solid #DDD;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px}.field2{padding:10px;margin-bottom:15px;border:1px solid #ADD8E6;background-color:#ADD8E6;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px}.field2:hover{padding:10px;margin-bottom:15px;border:1px solid #87CEFA;background-color:#87CEFA;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;}</style></head><body><sectionclass="content"><divclass="contato"><h2>Login</h2>
Por favor, entre com o e-mail e a senha cadastrados.<br><br><formname="cad_usu"class="form"method=post><inputclass="field"type="email"name="email"placeholder="E-mail"required><inputclass="field"type="password"name="senha"placeholder="Senha"required><inputclass="field2"type="submit"name="SendLogin"value="Entrar no Sistema"><inputclass="field2"type="reset"value="Limpar Formulário"><center><ahref="recuperar_senha.php"><fontsize="2">Esqueci a senha</font></a></center></form></div></section><?php
if(!isset($_POST['SendLogin'])){exit;}
$dados = filter_input_array(INPUT_POST,FILTER_DEFAULT);
$query_usuario ="SELECT * FROM usuario WHERE
email =:email LIMIT 1";
$result_usuario = $conn->prepare($query_usuario);
$result_usuario->bindParam(':email', $dados['email']);
$result_usuario->execute();
$row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC);if($row_usuario &&(password_verify($dados['senha'], $row_usuario['senha']))){
$_SESSION['id']= $row_usuario['id'];
$_SESSION['nome']= $row_usuario['nome'];
$_SESSION['situacoe_id']= $row_usuario['situacoe_id'];
$_SESSION['niveis_acesso_id']= $row_usuario['niveis_acesso_id'];
header("Location: painel.php");}else{
echo "<div class=content><p style='color: red'>
Erro: Usuário e/ou senha inválidos!</p>";}?></body></html>
Página de Recuperação de Senha:
<?php
include_once 'connect.php';?><!DOCTYPE html><htmllang="pt-br"><head><metacharset="UTF-8"><metaname="viewport"content-"width=device-width, initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Recuperação de Senha</title><style>
body{font-family: Arial, Helvetica, sans-serif}.content{display:flex;justify-content: center}.contato{width:100%;max-width:500px;}.form{display: flex;flex-direction: column}.field{padding:10px;margin-bottom:15px;border:1px solid #DDD;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px}.field2{padding:10px;margin-bottom:15px;border:1px solid #ADD8E6;background-color:#ADD8E6;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px}.field2:hover{padding:10px;margin-bottom:15px;border:1px solid #87CEFA;background-color:#87CEFA;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;}</style><script>function confereSenha(){const senha = document.querySelector('input[name=senha]');const confirma_senha = document.querySelector('input[name=confirma_senha');if(confirma_senha.value === senha.value){
confirma_senha.setCustomValidity('');}else{
confirma_senha.setCustomValidity('As senhas digitadas não conferem! Elas precisam ser iguais.');}}</script></head><body><sectionclass="content"><divclass="contato"><center><h2>Recuperação de Senha</h2></center><br><br><?php
$user = $_GET['utilizador'];
$hash = $_GET['confirmacao'];
$query_recupera ="SELECT * FROM recuperacao";
$result_recupera = $conn->prepare($query_recupera);
$result_recupera->execute();
$row_recupera = $result_recupera->fetch(PDO::FETCH_ASSOC);
$user_cadastrado = $row_recupera['email_usu'];
$hash_cadastrado = $row_recupera['confirmacao'];
$query_usuario ="SELECT * FROM usuario WHERE email = '$user'";
$result_usuario = $conn->prepare($query_usuario);
$result_usuario->execute();
$row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC);
$id_user = $row_usuario['id'];
$modified = date('Y-m-d H:i:s');
echo $id_user;if(!empty($_POST)){if($user == $user_cadastrado && $hash == $hash_cadastrado){
$dados = filter_input_array(INPUT_POST, FILTER_DEFAULT);
$sql ="UPDATE usuario SET senha =:senha, modified =:modified WHERE id =:id";
$statement = $conn->prepare($sql);
$statement->bindParam(':senha', password_hash($dados['senha'], PASSWORD_DEFAULT));
$statement->bindParam(':modified', $modified);
$statement->bindParam(':id', $id_user);if($statement->execute()){
echo "<p style='color: green;'>Senha alterada com sucesso!</p>";
echo "<p><a href='login.php'>Voltar ao Login></a></p>";}else{
echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>";}}else{
echo "<p style='color: red;'>Erro! Não foi possível alterar sua senha. Por favor, entre em contato com o administrador do sistema.</p>";}}else{
echo "";}?><formname="cad_usu"class="form"method="POST"action=""><inputclass="field"type="password"name="senha"placeholder="Senha"requiredonchange='confereSenha();'><inputclass="field"type="password"name="confirma_senha"placeholder="Confirmar Senha"requiredonchange='confereSenha();'><inputclass="field2"type="submit"name="AlteraSenha"value="Alterar Senha"><inputclass="field2"type="reset"value="Limpar Formulário"></form></div></section></div></body></html>
E por fim, a página que abre quando clico no link recebido pelo e-mail:
<?php
include_once 'connect.php';?><html><metacharset="UTF-8"><metaname="viewport"content-"width=device-width, initial-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Login</title><style>
body{font-family: Arial, Helvetica, sans-serif}.content{display:flex;justify-content: center}.contato{width:100%;max-width:500px;}.form{display: flex;flex-direction: column}.field{padding:10px;margin-bottom:15px;border:1px solid #DDD;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px}.field2{padding:10px;margin-bottom:15px;border:1px solid #ADD8E6;background-color:#ADD8E6;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px}.field2:hover{padding:10px;margin-bottom:15px;border:1px solid #87CEFA;background-color:#87CEFA;border-radius:5px;font-family: Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;}</style></head><body><sectionclass="content"><divclass="contato"><h2>Recuperação de Senha</h2>
Por favor, digite o e-mail cadastrado.<br><br><formname="cad_usu"class="form"method=post><inputclass="field"type="email"name="email_usu"placeholder="E-mail"required><inputclass="field2"type="submit"name="Recuperar"value="Recuperar Senha"><center><ahref="login.php"><fontsize="2">Voltar ao Login</font></a></center></form></div></section><?php
if(!isset($_POST['Recuperar'])){exit;}
$dados = filter_input_array(INPUT_POST,FILTER_DEFAULT);
$query_usuario ="SELECT email FROM usuario WHERE
email =:email LIMIT 1";
$result_usuario = $conn->prepare($query_usuario);
$result_usuario->bindParam(':email', $dados['email_usu']);
$result_usuario->execute();
$row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC);if($row_usuario){//se o e-mail for localizado, acontece isso://gera a chave de confirmação
$utilizador = $dados['email_usu'];
$chave = sha1(uniqid( mt_rand(),true));//salva a chave no banco de dados
$query_salva_usu ="INSERT INTO recuperacao (email_usu, confirmacao) VALUES (:email_usu, :confirmacao)";
$salva_usu = $conn->prepare($query_salva_usu);
$salva_usu->bindParam(':email_usu', $dados['email_usu'], PDO::PARAM_STR);
$salva_usu->bindParam(':confirmacao', $chave, PDO::PARAM_STR);
$salva_usu->execute();if($salva_usu->rowCount()){
$link ="http://www.sgi.dev.br/recuperar.php?utilizador=$utilizador&confirmacao=$chave";if(mail($utilizador,'Recuperação de Senha','Olá, '.$utilizador.'. Recebemos uma solicitação de recuperação de senha do site SGI - Sistema de Gestão de Igrejas. Se foi você, por favor, clique no link a seguir e crie uma nova senha: '.$link.' Se você não se lembra de ter solicitado essa alteração, por favor, desconsidere este e-mail. '))
echo "<center><p style='color: green;'>Um link de confirmação foi enviado para '.$utilizador.'. <br>Por favor, abra-o e confirme sua solicitação. Se não o encontrar na caixa de entrada, gentileza verificar a caixa de spam.</center></p>";}else{
echo "<p style='color: #ff0000;'>Erro. Não foi possível recuperar a senha. Entre em contato com o administrador do sistema!</p>";}}else{//se o e-mail não for localizado, acontece isso:
echo "<div class=content><p style='color: red'>
Erro: email não encontrado!</p>";}?></body></html>
Pergunta
mm_edilson
Colegas, boa tarde. Estou criando um sisteminha de login, e estou na parte de recuperação de senha. Escrevi o código para o usuário digitar o e-mail cadastrado e solicitar a redefinição. Então, ele recebe um link único no e-mail dele e, por meio desse link, abre a página de criar nova senha.
Tudo funciona. O cadastro, o login, e a alteração de senha. Exceto por um problema. Quando faço uma recuperação de senha, e retorno para a página de login, ele dá a nova senha como inválida. Aí, se eu fechar o navegador e abrir de novo, e digitar a nova senha, ele entra normalmente. E não funciona ctrl+F5. Tem que fechar e abrir.
Não faço ideia do que pode estar causando isso.
Vou postar meu código:
Página de Login:
Página de Recuperação de Senha:
E por fim, a página que abre quando clico no link recebido pelo e-mail:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.