Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 517175

PHP хэширование и авторизация из базы данных - PHP

$
0
0
Добрый вечер.

Имею страницу со входом и регистрацией.
Код регистрации:

Код:

<?php

namespace XFO;

class registerUser {
    private $conn;
    private $escapeObj;
    private $id;

    private $name;
    private $usename;
    private $email;
    private $password;
    private $gender;
    private $birthday = '1-1-1990';
    private $location = '';
    private $hometown = '';
    private $about = '';

    private $allowedGenders = array('male', 'female');

    function __construct()
    {
        global $conn;
        $this->conn = $conn;
        $this->escapeObj = new \XFO\Escape();
        return $this;
    }

    public function setConnection(\mysqli $conn)
    {
        $this->conn = $conn;
        return $this;
    }

    protected function getConnection()
    {
        return $this->conn;
    }

    public function register()
    {
        if (! empty ($this->name) && ! empty ($this->username) && ! empty ($this->email) && ! empty ($this->password) && ! empty ($this->gender))
        {
            $query = $this->getConnection()->query("INSERT INTO " . DB_ACCOUNTS . " (active,about,cover_id,email,email_verification_key,name,password,time,type,username) VALUES (1,'" . $this->about . "',0,'" . $this->email . "','" . md5(generateKey()) . "','" . $this->name . "','". password_hash ($this->password, PASSWORD_DEFAULT) ."'," . time() . ",'user','" . $this->username . "')");

            if ($query)
            {
                $this->id = $this->getConnection()->insert_id;
                $query2 = $this->getConnection()->query("INSERT INTO " . DB_USERS . " (id,birthday,gender,current_city,hometown) VALUES (" . $this->id . ",'" . $this->birthday . "','" . $this->gender . "','" . $this->location . "','" . $this->hometown . "')");

                if ($query2)
                {
                    $timelineObj = new \XFO\User();
                    $timelineObj->setId($this->id);
                    $get = $timelineObj->getRows();
                    return $get;
                }
            }
        }
    }

    private function validateUsername($u)
    {
        if (strlen($u) > 3 && ! is_numeric($u) && preg_match('/^[A-Za-z0-9_]+$/', $u))
        {
            return true;
        }
    }

    public function setName($n)
    {
        if (! empty($n))
        {
            $this->name = $this->escapeObj->stringEscape($n);
        }
    }

    public function setUsername($u)
    {
        if ($this->validateUsername($u))
        {
            $this->username = $this->escapeObj->stringEscape($u);
        }
    }

    public function setEmail($e)
    {
        if (filter_var($e, FILTER_VALIDATE_EMAIL))
        {
            $this->email = $this->escapeObj->stringEscape($e);
        }
    }

    public function setPassword($p)
    {
        if (! empty($p))
        {
            $this->password = $p;
        }
    }

    public function setGender($g)
    {
        if (in_array($g, $this->allowedGenders))
        {
            $this->gender = $g;
        }
    }

    public function setBirthday($b)
    {
        if (is_array($b))
        {
            $b = implode('-', $b);
            $regex = '/^([0-9]{1,2})\-([0-9]{1,2})\-([0-9]{4})$/';

            if (preg_match($regex, $b))
            {
                $this->birthday = $b;
            }
        }
    }

    public function setLocation($l)
    {
        if (! empty($l))
        {
            $this->location = $this->escapeObj->stringEscape($l);
        }
    }

    public function setHometown($h)
    {
        if (! empty($h))
        {
            $this->hometown = $this->escapeObj->stringEscape($h);
        }
    }

    public function setAbout($a)
    {
        if (! empty($a))
        {
            $this->about = $this->escapeObj->stringEscape($a);
        }
    }
}

После регистрации пароль успешно хэшируется и вносится в базу данных. Принимая значение примерно "$2Y10..", длиной 60 символов.

После регистрации автоматические открывается страница с профилем.
Но вот повторная авторизация не работает, пишет пароль неверный.

Код авторизации:

Код:

<?php
    $data['error_message'] = $lang['error_empty_login'];

    $loginId = $escapeObj->stringEscape($_POST['login_id']);
    $hash = password_hash($_POST['login_password'], PASSWORD_DEFAULT);
    $crypto_pass = password_verify($_POST['login_password'], $hash);

    $userId = getUserId($conn, $loginId);

    if ($userId)
    {
    $query = $conn->query("SELECT id,username,email_verified FROM " . DB_ACCOUNTS . " WHERE id=$userId AND password='$crypto_pass' AND type='user' AND active=1");
    $data['error_message'] = $lang['error_bad_login'];

    if ($query->num_rows == 1)
    {
    $fetch = $query->fetch_array(MYSQLI_ASSOC);
    $continue = true;

    if ($config['email_verification'] == 1 && $fetch['email_verified'] == 0)
    {
        $continue = false;
        $data['error_message'] = $lang['error_verify_email'];
    }

    if ($continue == true)
    {
        $_SESSION['user_id'] = $fetch['id'];
        $_SESSION['user_pass'] = $crypto_pass;

        if (isset($_POST['keep_logged_in']) && $_POST['keep_logged_in'] == true)
        {
            setcookie('sk_u_i', $_SESSION['user_id'], time() + (60 * 60 * 24 * 7));
            setcookie('sk_u_p', $_SESSION['user_pass'], time() + (60 * 60 * 24 * 7));
        }

        $data['status'] = 200;
        $data['redirect_url'] = smoothLink('index.php?tab1=home');
    }
  }
    else
{
    $data['error_message'] = $lang['incorrect_password'];
}
    }
    else
  {
$data['error_message'] = $lang['no_user_found'];
    }

    header("Content-type: application/json; charset=utf-8");
    echo json_encode($data);
    $conn->close();
    exit();

вероятно хэш не сходится, не могу понять в чем проблема, благодарен если поможете. :)

P.S> подобный код для админки работает, вот код авторизации админки, рабочий:

Код:

<?php
if (! empty($_POST['admin_login']) && isset($_POST['keep_blank']) && empty($_POST['keep_blank']))
{
    if (!empty($_POST['admin_username']) && !empty($_POST['admin_password']))
    {
        $admin_username = SK_secureEncode($_POST['admin_username']);
        $admin_password = SK_secureEncode($_POST['admin_password']);
                $hash = password_hash($_POST['admin_password'], PASSWORD_DEFAULT);
        $cr_admin_password = password_verify($_POST['admin_password'], $hash);
       
        $config = array();
        $confQuery = mysqli_query($dbConnect, "SELECT * FROM " . DB_CONFIGURATIONS);
        $config = mysqli_fetch_assoc($confQuery);
       
        if ($admin_username == $config['admin_username'] && $cr_admin_password == $config['admin_password'])
        {
            $_SESSION['admin_id'] = $admin_username;
            $_SESSION['admin_password'] = $cr_admin_password;
            header('Location: ?logged_in');
        }
    }
}


Viewing all articles
Browse latest Browse all 517175

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>