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
}