Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rodrigo5468

Senha incorreta

Recommended Posts

Bom, depois de eu adicionar uma linha para as minhas senhas ficar armazenadas como whirlpool eu registro normalmente. Porem não consigo me conectar, da erro que á senha está incorreta. Foi depois disso que aconteceu o erro.

$Password = hash('whirlpool', $Password);
//$Password = password_hash($Password, PASSWORD_DEFAULT);

O cadastro ficou como whirlpool porem não consigo me conectar, alguém sabe como resolvo este erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo o campo está como varchar 129 caracteres, aumentei um até para ver se resultava mais mesmo assim nada. Agora arrumei para 128 caracteres novamente, irei deixar o código para criar uma conta no sistema.

Register.php

<?php
class Registration
{
    private $db_connection = null;
    public $errors = array();
    public $messages = array();
	public function __construct()
    {
        if (isset($_POST["register"])) {
            $this->registerNewUser();
        }
    }
	
	private function registerNewUser()
    {
        if (empty($_POST['Username'])) {
            $this->errors[] = "Nome de Usuário vazio";
        } elseif (empty($_POST['user_password_new']) || empty($_POST['user_password_repeat'])) {
            $this->errors[] = "Senha vazia";
        } elseif ($_POST['user_password_new'] !== $_POST['user_password_repeat']) {
            $this->errors[] = "Senha e senha de repetição não são os mesmos";
        } elseif (strlen($_POST['user_password_new']) < 6) {
            $this->errors[] = "Senha tem um comprimento mínimo de 6 caracteres";
        } elseif (strlen($_POST['Username']) > 64 || strlen($_POST['Username']) < 2) {
            $this->errors[] = "Nome de usuário não pode ser menor que 2 ou mais de 64 caracteres";
        } elseif (!preg_match('/^[a-z\d]{2,64}$/i', $_POST['Username'])) {
            $this->errors[] = "Usuário não se encaixa no esquema de nome: somente AZ e do números são permitidos, 2-64 caracteres";
        } elseif (empty($_POST['email'])) {
            $this->errors[] = "E-mail não pode estar vazio";
        } elseif (strlen($_POST['email']) > 64) {
            $this->errors[] = "Email não pode ser maior que 64 caracteres";
        } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $this->errors[] = "Seu endereço de email não está em um formato de e-mail válido";
        } elseif (!empty($_POST['Username'])
            && strlen($_POST['Username']) <= 64
            && strlen($_POST['Username']) >= 2
            && preg_match('/^[a-z\d]{2,64}$/i', $_POST['Username'])
            && !empty($_POST['email'])
            && strlen($_POST['email']) <= 64
            && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)
            && !empty($_POST['user_password_new'])
            && !empty($_POST['user_password_repeat'])
            && ($_POST['user_password_new'] === $_POST['user_password_repeat'])
        ) {
            $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

            if (!$this->db_connection->set_charset("utf8")) {
                $this->errors[] = $this->db_connection->error;
            }

            if (!$this->db_connection->connect_errno) {

                $Username = $this->db_connection->real_escape_string(strip_tags($_POST['Username'], ENT_QUOTES));
                $email = $this->db_connection->real_escape_string(strip_tags($_POST['email'], ENT_QUOTES));

                $Password = $_POST['user_password_new'];

                $Password = hash('whirlpool', $Password);
				//$Password = password_hash($Password, PASSWORD_DEFAULT);

                $sql = "SELECT * FROM contas WHERE Username = '" . $Username . "' OR email = '" . $email . "';";
                $query_check_Username = $this->db_connection->query($sql);

                if ($query_check_Username->num_rows == 1) {
                    $this->errors[] = "Desculpe, esse endereço de nome de usuário / e-mail já está tomada.";
                } else {
                    $sql = "INSERT INTO contas (Username, Password, email)
                            VALUES('" . $Username . "', '" . $Password . "', '" . $email . "');";
                    $query_new_user_insert = $this->db_connection->query($sql);

                    if ($query_new_user_insert) {
                        $this->messages[] = "Sua conta foi criada com sucesso. Agora você pode logar.";
                    } else {
                        $this->errors[] = "Desculpe, o seu registo falhou. Por favor volte e tente novamente.";
                    }
                }
            } else {
                $this->errors[] = "Desculpe, sem conexão com o banco.";
            }
        } else {
            $this->errors[] = "Ocorreu um erro desconhecido.";
        }
    }
}

Me da uma ajuda aí não sei mais o que fazer. Está tudo certo só este erro mesmo. Eu preciso que a senha fica em whirlpool pois irei pegar a tabela do sistema antigo e jogar nesta. Para não perder os usuários.

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro, aqui está o:

Login.php

<?php
class Login
{
    private $db_connection = null;
    public $errors = array();
    public $messages = array();
	public function __construct()
    {
        session_start();

        if (isset($_GET["logout"])) {
            $this->doLogout();
        }
        elseif (isset($_POST["login"])) {
            $this->dologinWithPostData();
        }
    }

    private function dologinWithPostData()
    {
        if (empty($_POST['Username'])) {
            $this->errors[] = "Usuário estava vazio.";
        } elseif (empty($_POST['Password'])) {
            $this->errors[] = "Senha estava vazio.";
        } elseif (!empty($_POST['Username']) && !empty($_POST['Password'])) {

            $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

            if (!$this->db_connection->set_charset("utf8")) {
                $this->errors[] = $this->db_connection->error;
            }

            if (!$this->db_connection->connect_errno) {

                $Username = $this->db_connection->real_escape_string($_POST['Username']);

                $sql = "SELECT Username, email, Password
                        FROM contas
                        WHERE Username = '" . $Username . "' OR email = '" . $Username . "';";
                $result_of_login_check = $this->db_connection->query($sql);

                if ($result_of_login_check->num_rows == 1) {

                    $result_row = $result_of_login_check->fetch_object();

                    if (password_verify($_POST['Password'], $result_row->Password)) {

                        $_SESSION['Username'] = $result_row->Username;
                        $_SESSION['email'] = $result_row->email;
                        $_SESSION['user_login_status'] = 1;

                    } else {
                        $this->errors[] = "Senha incorreta. Tente novamente.";
                    }
                } else {
                    $this->errors[] = "Este usuário não existe.";
                }
            } else {
                $this->errors[] = "Problema de conexão de banco de dados.";
            }
        }
    }

    public function doLogout()
    {
        $_SESSION = array();
        session_destroy();
        $this->messages[] = "Você foi desconectado.";

    }

    public function isUserLoggedIn()
    {
        if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) {
            return true;
        }
        return false;
    }
}

Isso que você queria? Pois depois disso só tem a conexão com o banco de dados. Obrigado Beraldo por está me ajudando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você usa hash() pra gerar o hash na hora de salvar, mas usa password_verify() na hora de comparar. Esse é o problema.

 

Você tem que usar hash() novamente pra gerar o hash da senha digitada e, em seguida, comparar com a senha do banco.

 

password_verify() só vai funcionar se você usar password_hash() pra gerar o hash na base de dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo acho que estou fazendo confusões com o código.

Tentei dessas maneiras:

if (hash($_POST['Password'], $result_row->Password)) {

$_SESSION['Username'] = $result_row->Username;
$_SESSION['email'] = $result_row->email;
$_SESSION['user_login_status'] = 1;

}
if (password_hash($_POST['Password'], $result_row->Password)) {

$_SESSION['Username'] = $result_row->Username;
$_SESSION['email'] = $result_row->email;
$_SESSION['user_login_status'] = 1;

}
if ($Password = hash('whirlpool'), $_POST['Password'], $result_row->Password)){ 

Só que não está indo, acredito que é este trecho que está incorreto certo? O registro está registrando as senhas em whirlpool. Porem não está conseguindo verificar no banco de dados se é a senha ou não. O que eu faço? Me ajude a resolver isso Beraldo por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica é assim:

 

1. O usuário se registra, informando email e senha. Essa senha é salva no banco com Whirlpool. Ok. Até aí você fez.

2. No login, o usuário informa email e senha.

3. A senha digitada deve ser codificada com Whirlpool, para que seja comparada com a senha vinda do banco, que já está com Whirlpool e não deve ser codificada novamente

 

No seu código, você está aplicando hash() à senha vinda do banco. Ou seja, fazendo Whirlpool do Whirlpool da senha cadastrada.

// fazendo login
// ...
$senha = $_POST['senha'];
 
// faz o SELECT
 
// ...
 
if ( hash( 'whirlpool', $senha ) == $senha_vinda_do_bando )
    // inicia a session
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.