• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

password_verify nie działa php pdo

Aruba Cloud - Virtual Private Server VPS
+1 głos
217 wizyt
pytanie zadane 9 marca 2021 w PHP przez niezalogowany

Witam mam problem z weryfikacją hasła za pomocą funkcji password_verify w metodzie logowania czy ktoś może mi podpowiedzieć gdzie leży problem 

Oto moja metoda rejestracji 

 public function Registerion(array $date): void // Metoda która sprawdza czy dany użytkownik został zarejestrowany
    {
            $email = $this->conn->quote($date['email']);
            $NazwaUzytkownika = $this->conn->quote($date['NazwaUzytkownika']);
            $haslo = $this->conn->quote($date['Haslo']);
            $PowtorzHaslo = $this->conn->quote($date['PowtorzHaslo']);
            $Imie = $this->conn->quote($date['Imie']);
            $Nazwisko = $this->conn->quote($date['Nazwisko']);
            $Numer = $this->conn->quote($date['Numer']);
            $Panstwo = $this->conn->quote($date['Panstwo']);
            $Miasto = $this->conn->quote($date['Miasto']);
            $Wybor = $this->conn->quote($date['Wybor']);
            $KodPocztowy = $this->conn->quote($date['KodPocztowy']);
            if(isset($email))
            {
                // Walidajca danych powiodła się
		        $ok = true;
                $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

                if(empty($email))
                {
                    $_SESSION['email_provided'] = $_POST['email']; // zmienna sesyjna podaje nieprawidłowy email
                    header('Location: /?action=Rejestracja'); 
                    $ok = false; 
                }

                $NazwaUzytkownika = filter_input(INPUT_POST, 'NazwaUzytkownika');
                if((strlen($NazwaUzytkownika) < 3) || (strlen($NazwaUzytkownika) > 20)) {
                    $ok = false;
                    $_SESSION['name_user'] = $_POST['NazwaUzytkownika']; // Sprawdzenie długości znaków Nazwa Uzytkownika
                    header('Location: /?action=Rejestracja');
                }
                $NazwaUzytkownika = filter_input(INPUT_POST, 'NazwaUzytkownika');
                if(ctype_alnum($NazwaUzytkownika)==false) {
                    $ok = false;
                    $_SESSION['not_polish_user'] = $_POST['NazwaUzytkownika']; // Nazwa użytkownika ma składać się tylko z liter i cyfr (bez polskich znaków)
                    header('Location: /?action=Rejestracja');
                }
                $Haslo = filter_input(INPUT_POST, 'Haslo');
                $PowtorzHaslo = filter_input(INPUT_POST, 'PowtorzHaslo');
                /* Przyda się do sprawdzania hashy
		        $hash_hasla = password_hash($hasloOne, PASSWORD_DEFAULT);
		        echo $hash_hasla; exit();
		        */
                if((strlen($Haslo)< 8) || (strlen($Haslo) > 20))
                {
                    $ok = false;
                    $_SESSION['one_password'] = $_POST['Haslo']; // Hasło musi posiadać od 8 do 20 znaków!
                    header('Location: /?action=Rejestracja');
                } 
                if($Haslo!=$PowtorzHaslo)
                {
                    $ok = false;
                    $_SESSION['same_password'] = $_POST['Haslo']; // Podane hasła nie są identyczne!
                    header('Location: /?action=Rejestracja'); 
                } 
                $hash_hasla = password_hash($Haslo, PASSWORD_DEFAULT);
                $Imie = filter_input(INPUT_POST, 'Imie');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Imie))
                {
                    $ok = false;
                    $_SESSION['name_field'] = $_POST['Imie']; // Wprowadzanie Imienia
                    header('Location: /?action=Rejestracja');
                }
                $Nazwisko = filter_input(INPUT_POST, 'Nazwisko');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Nazwisko))
                {
                    $ok = false;
                    $_SESSION['surname_field'] = $_POST['Nazwisko']; // Wprowadzenie Nazwiska
                    header('Location: /?action=Rejestracja'); 
                }
                $Numer = filter_input(INPUT_POST, 'Numer');
                if(!preg_match('/^[0-9]{9,13}$/',$Numer))
                {
                    $ok = false;
                    $_SESSION['number_field'] = $_POST['Numer']; // Wprowadzenie Numeru Telefonu
                    header('Location: /?action=Rejestracja'); 
                }
                $Panstwo = filter_input(INPUT_POST, 'Panstwo');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Panstwo))
                {
                    $ok = false;
                    $_SESSION['country_field'] = $_POST['Panstwo']; // Wprowadzenie Państwa w którym użytkownik się znajduje 
                    header('Location: /?action=Rejestracja'); 
                }
                $Miasto = filter_input(INPUT_POST, 'Miasto');
                if(!preg_match('/^[a-ząćęłńóśźż]+$/ui',$Miasto))
                {
                    $ok = false;
                    $_SESSION['city_field'] = $_POST['Miasto']; // Wprowadzenie Miasta przez użytkownika
                    header('Location: /?action=Rejestracja'); 
                } 
                // Jakie województwo
                $Wybor = filter_input(INPUT_POST, 'Wybor');
                // Jaki kod pocztowy
                $KodPocztowy = filter_input(INPUT_POST, 'KodPocztowy');
                if(empty($KodPocztowy)) {
                    $ok = false;
                    $_SESSION['post_office'] = $_POST['KodPocztowy']; // Wprowadzenie kodu pocztowego 
                    header('Location: /?action=Rejestracja');
                }
                $results = $this->conn->query("SELECT id FROM uzytkownicy WHERE NazwaUzytkownika='$NazwaUzytkownika'");
                $howMuchUser = $results->rowCount();
                if($howMuchUser > 0) 
                {
                    $ok = false;
                    $_SESSION['exist_user'] = $_POST['NazwaUzytkownika']; // Czy istnieje już taki użytkownik w bazie 
                    header('Location: /?action=Rejestracja'); 
                } 
                $result = $this->conn->query("SELECT id FROM uzytkownicy WHERE email='$email'");
                $howMuchEmail = $result->rowCount();
                if($howMuchEmail > 0)
                {
                    $ok = false;
                    $_SESSION['exist_mail'] = $_POST['email']; // Czy istnieje użytkownik o taki emailu
                    header('Location: /?action=Rejestracja'); 
                }
                
                if($ok==true)
                {
                    $query = "INSERT INTO uzytkownicy VALUES(NULL, '$email', '$NazwaUzytkownika', '$hash_hasla', '$Imie', '$Nazwisko', '$Numer', '$Panstwo', '$Miasto', '$Wybor', '$KodPocztowy')";
                    $this->conn->exec($query);
                }
            }
    }

Oto moja metoda logowania 

 public function Logged(): void // Metoda która sprawdza czy dany użytkownik został zalogowany
    {
        if(!isset($_SESSION['ID_LOGGED'])) {
            if(isset($_POST['NazwaUzytkownika'])) {
                $NazwaUzytkownika = filter_input(INPUT_POST, 'NazwaUzytkownika');
                $haslo = filter_input(INPUT_POST, 'Haslo');
                $query = $this->conn->prepare('SELECT id, Haslo FROM uzytkownicy WHERE NazwaUzytkownika = :NazwaUzytkownika');
                $query->bindValue(':NazwaUzytkownika', $NazwaUzytkownika, PDO::PARAM_STR);
                $query->execute();
                $user = $query->fetch();
                if($user && password_verify($haslo,$user['Haslo'])) // Jeżeli login istnieje i dla tego rekordu hasło zgadza się z tym które mamy zahaszowane w bazie to oznacza że użytkownik zalogował się poprawnie 
                {
                    $_SESSION['ID_LOGGED'] = $user['id'];
                    unset($_SESSION['failed_attempt']); // Usuwanie już nieprawidłowego logowania
                } else {
                    $_SESSION['failed_attempt'] = true; // Nieudana próba logowania 
                    header('Location: /?action=Logowanie');
                    exit();
                }
            }
        }

        if(isset($_SESSION['ID_LOGGED'])) 
        {
            header('Location: /?action=Zalogowany');
            exit();
        }
    }

Gdyby ktoś jeszcze potrzebował tutaj jest funkcja z kontrolera 

public function ZalogowanyAction(): void
    {
        if($this->request->hasToPost()) {
            $Data = [
                'NazwaUzytkownika' => $this->request->postIndex('NazwaUzytkownika'),
                'Haslo' => $this->request->postIndex('Haslo'),
            ];
            $this->database->Logged($Data);
        }

        $this->view->displaytwo('Zalogowany', $viewParams ?? []);
    }
public function hasToPost(): bool
    {
        return !empty($this->post); // Zwróci wartość prawdziwą jeżeli to nie będzie post 
    }

 

komentarz 9 marca 2021 przez niezalogowany
przeniesione 9 marca 2021 przez Arkadiusz Waluk
Tutaj mam taki błąd
TypeError Object
(
    [message:protected] => password_verify() expects parameter 1 to be string, null given
    [string:Error:private] => 
    [code:protected] => 0
    [file:protected] => C:\xampp\htdocs\StronaInternetowa\src\Database.php
    [line:protected] => 254
    [trace:Error:private] => Array
        (
            [0] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\src\Database.php
                    [line] => 254
                    [function] => password_verify
                    [args] => Array
                        (
                            [0] => 
                            [1] => $2y$10$oilbg.crjt.GtfioOcuvuOK767E9nNmwJzOi5h0RIic4pAjr9gGxG
                        )

                )

            [1] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\src\Controller\ShopController.php
                    [line] => 68
                    [function] => Logged
                    [class] => App\Database
                    [type] => ->
                    [args] => Array
                        (
                            [0] => Array
                                (
                                    [NazwaUzytkownika] => Buczek123
                                    [Haslo] => 
                                )

                        )

                )

            [2] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\src\Controller\AbstractController.php
                    [line] => 56
                    [function] => ZalogowanyAction
                    [class] => App\Controller\ShopController
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

            [3] => Array
                (
                    [file] => C:\xampp\htdocs\StronaInternetowa\index.php
                    [line] => 31
                    [function] => execute
                    [class] => App\Controller\AbstractController
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

        )

    [previous:Error:private] => 
)
komentarz 9 marca 2021 przez Lavaganza Użytkownik (660 p.)

W requescie masz metode isPost() po co ci funkcja hasToPost ?

if ( $this->getRequest()->isPost() ) 

No i karygodny blad jesli kiedys pokazesz komus kod z polskimi nazwami to nikt cie nie. przyjmie. Co to te dzieciaki dzisiaj robia w tych kodach, jezuuu

komentarz 9 marca 2021 przez niezalogowany
Dzięki za radę

1 odpowiedź

0 głosów
odpowiedź 9 marca 2021 przez niezalogowany

W błędzie jest informacja że funkcja password_verify jako pierwszy parametr potrzebuje string a nie null.

[message:protected] => password_verify() expects parameter 1 to be string, null given

Sprawdź co masz w zmiennej haslo.

komentarz 9 marca 2021 przez niezalogowany

$haslo = filter_input(INPUT_POST, 'Haslo');

Tutaj struktura

Tutaj są moje wiersze w tabeli 

1
komentarz 9 marca 2021 przez niezalogowany
Dane z posta nie mają nic wspólnego z bazą danych. Sprawdził bym raczej formularz.

Podobne pytania

0 głosów
0 odpowiedzi 427 wizyt
pytanie zadane 30 lipca 2020 w PHP przez darekx10 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 751 wizyt
pytanie zadane 5 listopada 2022 w PHP przez zbiku25 Gaduła (3,000 p.)
0 głosów
0 odpowiedzi 288 wizyt
pytanie zadane 20 maja 2022 w PHP przez AnimaVillis Stary wyjadacz (12,970 p.)

93,264 zapytań

142,260 odpowiedzi

322,234 komentarzy

62,582 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...