CRIPTOGRAFIA DE SENHA - USUÁRIO INVÁLIDO
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:
Código de login:
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
Curtidas 0
Respostas
Arthur Heinrich
01/02/2023
$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']) {
GOSTEI 0
Edilson Santiago
01/02/2023
$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.
GOSTEI 0