CRIPTOGRAFIA DE SENHA - USUÁRIO INVÁLIDO

01/02/2023

0

Boa tarde, amigos. Estou criando um sisteminha simples de login. Consigo cadastrar o usuário, e tudo funciona salvando a senha crua no banco de dados. Mas quando tento usar hash para criptografar, ela salva criptografada no BD, mas na hora do login, dá senha inváilda. Alguém pode me ajudar com os códigos?



Página inserir novo usuário:

<?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>Cadastro de Usuário</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">

        <h2>Cadastro</h2>
        Por favor, preencha todos os dados para criar um novo usuário.<br><br>
        <?php 
        $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT);
        
        if (!empty($dados['CadUsuario'])) {
           var_dump($dados['senha']);
            $query_usuario = "INSERT INTO usuario (nome, email, senha, situacoe_id, niveis_acesso_id, created, modified) VALUES (:nome, :email, :senha, :situacoe_id, :niveis_acesso_id, :created, :modified)";
            $cad_usuario = $conn->prepare($query_usuario);
            $cad_usuario->bindParam(':nome', $dados['nome'], PDO::PARAM_STR);
            $cad_usuario->bindParam(':email', $dados['email'], PDO::PARAM_STR);
            $cad_usuario->bindParam(':senha', password_hash($dados['senha'], PASSWORD_BCRYPT,['cost=>12']));
            $cad_usuario->bindParam(':situacoe_id', $dados['situacoe_id'], PDO::PARAM_STR);
            $cad_usuario->bindParam(':niveis_acesso_id', $dados['niveis_acesso_id'], PDO::PARAM_STR);
            $cad_usuario->bindParam(':created', $dados['created'], PDO::PARAM_STR);
            $cad_usuario->bindParam(':modified', $dados['modified'], PDO::PARAM_STR);
            $cad_usuario->execute();
            if($cad_usuario->rowCount()){
                echo "<p style='color: green;'>Usuário cadastrado com sucesso!</p>";
            }else{
                
                echo "<p style='color: #ff0000;'>Erro ao cadastrar usuário!</p>";
        }}
        ?>
        
        
        
        <form name="cad_usu" class="form" method="POST" action="">
            <input class="field" name="nome" placeholder="Nome" required>
            <input class="field" type="email" name="email" placeholder="E-mail" required>
            <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 type="hidden" name="situacoe_id" value="1">
            <input type="hidden" name="niveis_acesso_id" value="1">
            <input type="hidden" name="created" value='<?php echo date("Y-m-d H:i:s"); ?>'>
            <input type="hidden" name="modified" value='<?php echo date("Y-m-d H:i:s"); ?>'>
            <input class="field2" type="submit" name="CadUsuario" value="Cadastrar Usuário">
            <input class="field2" type="reset" value="Limpar Formulário">
            
        </form>
        </div>
        
    </section>
     </div>   
</body>
</html>



Código de login:

<?php
session_start();
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>Cadastro de Usuário</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>
        <?php 
        $dados = filter_input_array(INPUT_POST,FILTER_DEFAULT);
        if(!empty($dados['SendLogin'])){
          $query_usuario = "SELECT id, nome, email, senha 
          FROM usuario 
          WHERE email =:email AND senha =:senha
          LIMIT 1";  
          $result_usuario = $conn->prepare($query_usuario);
          $result_usuario->bindParam(':email', $dados['email']);
          $result_usuario->bindParam(':senha', password_hash($dados['senha'], PASSWORD_BCRYPT,['cost=>12']));
          $result_usuario->execute();
          
          if(($result_usuario) AND ($result_usuario->rowCount() !=0)){
            $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC);
            if($dados['senha'] == $row_usuario['senha']) {
                $_SESSION['id'] = $row_usuario['id'];
                $_SESSION['nome'] = $row_usuario['nome']; 
                header("Location: painel.php");
            }else{
                $_SESSION['msg'] = "<p style='color: red'>Erro: Usuário e/ou senha inválidos!</p>";
            }
          }else{
              $_SESSION['msg'] = "<p style='color: red'>Erro: Usuário e/ou senha inválidos!</p>";
          }
          
          
        }
        
        if(isset($_SESSION['msg'])){
            echo $_SESSION['msg'];
            unset($_SESSION['msg']);
        }
        ?>
        
        <form name="cad_usu" class="form" method="POST" action="">
            <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">
            
        </form>
        </div>
        
    </section>
     </div>   
</body>
</html>
Edilson Santiago

Edilson Santiago

Responder

Posts

01/02/2023

Arthur Heinrich

$result_usuario->bindParam(':senha', password_hash($dados['senha'], PASSWORD_BCRYPT,['cost=>12']));
          $result_usuario->execute();
           
          if(($result_usuario) AND ($result_usuario->rowCount() !=0)){
            $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC);
            if($dados['senha'] == $row_usuario['senha']) {


A variável $dados['senha'] não está criptografada, mas a variável $row_usuario['senha'], que veio da tabela está. Por isso não bate.

Troque para:

            if(password_hash($dados['senha'], PASSWORD_BCRYPT,['cost=>12']) == $row_usuario['senha']) {

Responder

01/02/2023

Edilson Santiago

$result_usuario->bindParam(':senha', password_hash($dados['senha'], PASSWORD_BCRYPT,['cost=>12']));
          $result_usuario->execute();
           
          if(($result_usuario) AND ($result_usuario->rowCount() !=0)){
            $row_usuario = $result_usuario->fetch(PDO::FETCH_ASSOC);
            if($dados['senha'] == $row_usuario['senha']) {


A variável $dados['senha'] não está criptografada, mas a variável $row_usuario['senha'], que veio da tabela está. Por isso não bate.

Troque para:

            if(password_hash($dados['senha'], PASSWORD_BCRYPT,['cost=>12']) == $row_usuario['senha']) {



Fiz como vc me orientou, mas o erro continua.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar