Web pro horních 10 000 www.koncier.cz
Stránka 2 z 2 PrvníPrvní 12
Zobrazují se odpovědi 31 až 41 z 41

Hash sha512 nevěděl by někdo?

  1. ano, to je ono.

    uprav to přibližně takhle, tj. předej si do funkce login původní heslo.


    PHP kód:
    <?php
    // Controller pro hlavní stránku

    class AdminController extends Controller
    {
            public 
    $admin 1;
            
        public function 
    process($parameters)
        {

                    
    $this->header = array(
                                    
    'title' => 'Administrace - Ulov zákazníka',
                                    
    'keywords' => '',
                                    
    'description' => '',
                    );

                    if(!
    User::logged_in()) {                
                    
                            if (!empty(
    $_POST) AND isset($_POST['submit'])) {
                                    
    $_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
                                    
    $input_password $_POST['password'];
                                    
    $_POST['password'] = User::encrypt_password($_POST['email'], $_POST['password']);

                                    if (empty(
    $_POST['email']) || empty($_POST['password'])) {
                                            
    $_SESSION['error'][] = 'Musíte vyplnit e-mail a heslo.';
                                    } elseif (
    filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) {
                                            
    $_SESSION['error'][] = 'Zadaný e-mail nemá platný formát.';
                                    } elseif (
    User::login($_POST['email'], $_POST['password']) == false) {
                                            
    $_SESSION['error'][] = 'Neplatné přihlašovací údaje.';
                                    }

                                    if (!empty(
    $_POST) && empty($_SESSION['error'])) {
                                            
    $login User::login($_POST['email'], $input_password);

                                            
    setcookie("user_id"$logintime()+60*60*24*30,"/");

                                            
    $_SESSION['user_id'] = $login;
                                            
                                            
    $this->redirect('admin');
                                    }

                            }

                            
    $this->view 'admin/login';

                    } else {
                            
    $this->view 'admin/index';
                    }
        }
    }


    ---------- Příspěvek doplněn 03.09.2018 v 17:34 ----------

    hm, php kód tady nelze lépe zvýrazňovat, přidal jsem řádek $input_password = $_POST['password']; a input_password proměnnou hodil do login funkce.
    Naposledy upravil TomášX : 03.09.2018 v 17:33

  2. Co se právě děje na Webtrhu?
  3. Celé jsem to tam upravené zkopíroval...a stále nic...heslo je noveheslo, to pak zase vygeneruju nějaké nové... můžeš vyzkoušet.

    Administrace - Ulov zákazníka

  4. funkce user_login tam je dvakrát, vyměň ten POST[password] za i put_password proměnou i na tom prvním místě.

    Stránka nemá ssl, prohlížeč mi nedovolí formulář odeslat :), ale to by stejně nic nepomohlo.

    Musíš víc sám hledat chyby, pokud t nejde, někde tam je chyba, chce to vždy znovu a znovu pročítat a postupně se někam dostávat.

  5. Zkoušel jsem to i bez toho emailu..a nic.... $input_password = User::encrypt_password($_POST['email'], $_POST['password']); Proč tady encryptuju i ten email ? Už fakt nevim..

    // Controller pro hlavní stránku

    class AdminController extends Controller
    {
    public $admin = 1;

    public function process($parameters)
    {

    $this->header = array(
    'title' => 'Administrace - Ulov zákazníka',
    'keywords' => '',
    'description' => '',
    );

    if(!User::logged_in()) {

    if (!empty($_POST) AND isset($_POST['submit'])) {
    $_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
    $input_password = $_POST['password'];
    $input_password = User::encrypt_password($_POST['email'], $_POST['password']);

    if (empty($_POST['email']) || empty($_POST['password'])) {
    $_SESSION['error'][] = 'Musíte vyplnit e-mail a heslo.';
    } elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) {
    $_SESSION['error'][] = 'Zadaný e-mail nemá platný formát.';
    } elseif (User::login($_POST['email'], $_POST['password']) == false) {
    $_SESSION['error'][] = 'Neplatné přihlašovací údaje.';
    }

    if (!empty($_POST) && empty($_SESSION['error'])) {
    $login = User::login($_POST['email'], $input_password);

    setcookie("user_id", $login, time()+60*60*24*30,"/");

    $_SESSION['user_id'] = $login;

    $this->redirect('admin');
    }

    }

    $this->view = 'admin/login';

    } else {
    $this->view = 'admin/index';
    }
    }
    } [/CODE]

  6. ten celej kód je dost nešikovný. Email se neecryptuje, pouze je jako vstup do funkce, v původní verzi se přece dělal hash z emailu a hesla, teď nově jsem ti doporučil do nepoužívat.

    Takhle by to mělo vypadat, můžeš vyzkoušet?

    PHP kód:
    <?php
    // Controller pro hlavní stránku

    class AdminController extends Controller
    {
            public 
    $admin 1;
            
        public function 
    process($parameters)
        {

                    
    $this->header = array(
                                    
    'title' => 'Administrace - Ulov zákazníka',
                                    
    'keywords' => '',
                                    
    'description' => '',
                    );

                    if(!
    User::logged_in()) {                
                    
                            if (!empty(
    $_POST) AND isset($_POST['submit'])) {
                                    
    $_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
                                    
    $input_password $_POST['password'];
                                    
    $_POST['password'] = User::encrypt_password($_POST['email'], $_POST['password']);

                                    if (empty(
    $_POST['email']) || empty($_POST['password'])) {
                                            
    $_SESSION['error'][] = 'Musíte vyplnit e-mail a heslo.';
                                    } elseif (
    filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) {
                                            
    $_SESSION['error'][] = 'Zadaný e-mail nemá platný formát.';
                                    } elseif (
    User::login($_POST['email'], $input_password) == false) {
                                            
    $_SESSION['error'][] = 'Neplatné přihlašovací údaje.';
                                    }

                                    if (!empty(
    $_POST) && empty($_SESSION['error'])) {
                                            
    $login User::login($_POST['email'], $input_password);

                                            
    setcookie("user_id"$logintime()+60*60*24*30,"/");

                                            
    $_SESSION['user_id'] = $login;
                                            
                                            
    $this->redirect('admin');
                                    }

                            }

                            
    $this->view 'admin/login';

                    } else {
                            
    $this->view 'admin/index';
                    }
        }
    }

  7. To je stejné ne? zkusil jsem a nejde....

  8. není, je tam změna v řádku "} elseif (User::login($_POST['email'], $input_password) == false) {", už bys to měl sám zdebugovat a zfunkčnit, je možné, že tam je chyba i uvnitř, za chvilku odcházím do offline.

    1. v tom controlleru se předpokládá, že login() vrací buď false nebo user_id, to ale současná implementace loginu nedělá a měla by se změnit takhle:

    PHP kód:
    public static function login($email$password) {
    $result Db::queryOne('SELECT `user_id`, `email`, `password` FROM `users` WHERE `email` = ?', array($email));

    if (
    is_null(@$result->user_id)) { return false; }; // user does not exists
    if (password_verify($password$result->password)) {
        return 
    $result->user_id;
    } else {
        return 
    false;

    2. Ve třídě User se v konstruktoru __construct volá db dotaz, ale jeho výsledek se ukládá pouze do lokální proměnné a rázem tedy zanikne, je to zbytečné.

    Budeš si to muset projít krok po kroku, zkusit si tam dát do některých míst napevno true a zkusit najít, kde je chyba a co nefunguje.

  9. když jsem dal

    Kód:
    if (is_null(@$result->user_id)) { return false; }; // user does not exists
    if (password_verify($password, $result->password)) {
        var_dump ($result->user_id);
        
    var_dump($result);
    var_dump($result->password);
    var_dump($password); //nech jen pokud není tajné, ale testovací
    var_dump(password_verify($password, $result->password));
    exit(); //ať se nesnaží nic jiného vypisovat, přesměrovávat a nechá tam debug výstupy
    return password_verify($password, $result->password);
      
    } else {
        return false;
        
    
    }  
    
    }

    Hodilo mi to tohle...

    Kód:
    int(3) object(stdClass)#5 (3) { ["user_id"]=> int(3) ["email"]=> string(22) "admin@ulovzakaznika.cz" ["password"]=> string(60) "$2y$10$ilzKn/lSi99fkI02mjOQheqF/HQUJ8IsnXasn0fNUHBMtBMZmrV2W" } string(60) "$2y$10$ilzKn/lSi99fkI02mjOQheqF/HQUJ8IsnXasn0fNUHBMtBMZmrV2W" string(9) "noveheslo" bool(true)
    To znamená, že to heslo zadávám správně ?

  10. ano, teď dokonce podle toho výpisu ti to již ověřilo správně heslo a měl bys být přihlášen. Můžeš z funkce odstranit ty var_dump volání a exit().

    Teď už by to mohlo fungovat.

  11. Když vyhodím var dump všude a dám tohle... tak to nepřeskočí na stránku administrace. Formulář jenom tak proskočí... s tim var dump to mělo dvě reakce..špatné heslo..nepustilo a dobré heslo ten předchozí výpis...

    Kód:
        public static function login($email, $password) {
    $result = Db::queryOne('SELECT `user_id`, `email`, `password` FROM `users` WHERE `email` = ?', array($email));
    
    if (is_null(@$result->user_id)) { return false; }; // user does not exists
    if (password_verify($password, $result->password)) {
       return $result->user_id;
        
      
    } else {
        return false;
        
    
    }  
    
    }


    ---------- Příspěvek doplněn 03.09.2018 v 22:38 ----------

    Takže se něco stane tady v admin controlleru ?

    Kód:
     <?php
    // Controller pro hlavní stránku
    
    class AdminController extends Controller
    {
            public $admin = 1;
            
        public function process($parameters)
        {
    
                    $this->header = array(
                                    'title' => 'Administrace - Ulov zákazníka',
                                    'keywords' => '',
                                    'description' => '',
                    );
    
                    if(!User::logged_in()) {                
                    
                            if (!empty($_POST) AND isset($_POST['submit'])) {
                                    $_POST['email'] = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
                                    $input_password = $_POST['password'];
                                    $_POST['password'] = User::encrypt_password($_POST['email'], $_POST['password']);
    
                                    if (empty($_POST['email']) || empty($_POST['password'])) {
                                            $_SESSION['error'][] = 'Musíte vyplnit e-mail a heslo.';
                                    } elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) {
                                            $_SESSION['error'][] = 'Zadaný e-mail nemá platný formát.';
                                    } elseif (User::login($_POST['email'], $input_password) == false) {
                                            $_SESSION['error'][] = 'Neplatné přihlašovací údaje.';
                                    }
    
                                    if (!empty($_POST) && empty($_SESSION['error'])) {
                                            $login = User::login($_POST['email'], $input_password);
    
                                            setcookie("user_id", $login, time()+60*60*24*30,"/");
    
                                            $_SESSION['user_id'] = $login;
                                            
                                            $this->redirect('admin');
                                    }
    
                            }
    
                            $this->view = 'admin/login';
    
                    } else {
                            $this->view = 'admin/index';
                    }
        }
    }

  12. ano, tam hledej zádrhel, jak jsem psal předminule, možná za to může funkce login, která po úpravě nevrací user_id, o dva příspěvky hore jsem ti psal její opravený kód.

    Může tam být problém se sezením a s cookies, na první polhed nevidím nikde chybu, ale kód je pro mě špatně čitelný na malém displaji - jsem na konferenci jen s mobilem.

    ---------- Příspěvek doplněn 03.09.2018 v 22:45 ----------

    může tam být i někde jinde ponechaný výstup z php a tím se nepošle správně hlavička na redirect na admin, zkontroluj přes Developer tools v prohlížeči jak vypadá komunikace se serverem a co se přenáší.

    Teoreticky také můžeš celou tuhle kontroler metodu upravit, dát tam natvrdo jedno heslo a tím si ověřit, jestli jsi na správné cestě.

Stránka 2 z 2 PrvníPrvní 12
Hostujeme u Server powered by TELE3