Расшифровать пароль php не работает - PullRequest
0 голосов
/ 13 июня 2018

зашифруйте пароль в базе данных с помощью следующего кода:

$pas = $_POST['password'];    
$pass = password_hash($pas, PASSWORD_BCRYPT);

в solucioncontroller.php Я пытаюсь проверить зашифрованный пароль, но он не работает

class solucionController {
include_once 'model/solucion.php';

public function Login()
{
    $solucion = new solucion();
    if (isset($_POST["login"]) && isset($_POST["password"]))
    {
        $login = htmlentities(addslashes($_POST["login"]));
        $password = htmlentities(addslashes($_POST["password"]));
        $solucion = $this->model->Logeo($login, $password);
        $pass= $this->model->getpass();
        if (password_verify($password, $pass)&&$solucion == 1)
        {
            setcookie('usuario', $login, time() + 3600);
            session_start();
            $_SESSION["Usuario"] = $login;
            header("Location: view/header.php");
            header("Location: view/solucion/solucion.php");
            header("Location: view/Footer.php");
        }
    }
    header('Location: index.php');
    return;
}
}

вмодель solucion.php Я ищу пользователя и пароль, введенный в представлении входа в систему

class solucion {
public $res;

public function Logeo($login, $pass)
{
    try {
        $sql = "SELECT * FROM logeo WHERE usuario = :login AND pass = :password";
        $resultado = $this->pdo->prepare($sql);
        $resultado->bindValue(":login", $login);
        $resultado->bindValue(":password", $pass);
        $resultado->execute();
        $numero_registro = $resultado->rowCount();
        if ($numero_registro != 0)
        {  
            return 1;
        }
       $this->res = $resultado->fetch(PDO::FETCH_ASSOC);
    } catch (Exception $e) {
        die($e->getMessage());
    }
}
}

public function getpass(){
    return $this->res['pass'];
}

в представлении входа в систему является форма, где вы вводите имя пользователя и пароль

<?php 
if(isset($_COOKIE['usuario'])){
require 'view/solucion/solucion.php';
}
else{


?>
<a class="btn btn-success pull-right" href="?c=solucion&a=Invitado">Invitado</a>
<h1>Introduce tus datos</h1>
    <form action="?c=solucion&a=Login" method="post">
        <div class="container">
        <label for="login"><b>Username</b></label>
<input type="text" placeholder="Ingrese usuario" name="login" required>
<label for="password"><b>Password</b></label>
<input type="password" placeholder="Ingrese Contraseña" name="password" required>
<button type="submit">Login</button>             
            </div>
        </form>
<?php }?>

при вводе имени пользователя и пароля данные удаляются и я остаюсь в виде логина

1 Ответ

0 голосов
/ 13 июня 2018

Вы должны извлекать данные, используя usuario, только не используя usuario и pass из базы данных.Поскольку пароль, сохраненный в базе данных, хэшируется и не может сравниться с простым текстовым паролем, введенным пользователем.Измените код модели, как показано ниже:

class solucion {

    public $res;

    public function Logeo($login, $pass) {
        try {
            $sql = "SELECT * FROM logeo WHERE usuario = :login";
            $resultado = $this->pdo->prepare($sql);
            $resultado->bindValue(":login", $login);
            $resultado->execute();
            $numero_registro = $resultado->rowCount();
            if ($numero_registro != 0) {
                return 1;
            }
            $this->res = $resultado->fetch(PDO::FETCH_ASSOC);
        } catch (Exception $e) {
            die($e->getMessage());
        }
    }
}

public function getpass() {
    return $this->res['pass'];
}

Также необходимо получить пароль из запроса как:

$password = $_POST["password"];

вместо

$password = htmlentities(addslashes($_POST["password"]));
...