Fórum Alteração de Senha só funciona depois que fecha o navegador e abre novamente #619559
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 :)