Alteração de Senha só funciona depois que fecha o navegador e abre novamente
18/02/2023
0
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 (vou deixar o código na resposta, porque não cabe aqui):
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> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-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> <section class="content"> <div class="contato"> <h2>Login</h2> Por favor, entre com o e-mail e a senha cadastrados.<br><br> <form name="cad_usu" class="form" method=post> <input class="field" type="email" name="email" placeholder="E-mail" required> <input class="field" type="password" name="senha" placeholder="Senha" required> <input class="field2" type="submit" name="SendLogin" value="Entrar no Sistema"> <input class="field2" type="reset" value="Limpar Formulário"> <center><a href="recuperar_senha.php"><font size="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> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content-"width=device-width, initial-scale=1.0"> <meta http-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> <section class="content"> <div class="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 ""; } ?> <form name="cad_usu" class="form" method="POST" action=""> <input class="field" type="password" name="senha" placeholder="Senha" required onchange=''confereSenha();''> <input class="field" type="password" name="confirma_senha" placeholder="Confirmar Senha" required onchange=''confereSenha();''> <input class="field2" type="submit" name="AlteraSenha" value="Alterar Senha"> <input class="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 (vou deixar o código na resposta, porque não cabe aqui):
Edilson Santiago
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)