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

Password_verify nie działa

Object Storage Arubacloud
0 głosów
240 wizyt
pytanie zadane 30 lipca 2020 w PHP przez darekx10 Nowicjusz (120 p.)
edycja 30 lipca 2020 przez darekx10

Dzień dobry, mam taki problem, że po hashowaniu hasła i dodania go do bazy danych, a następnie próbie zalogowaniu przy użyciu password_verify(), nie da się zalogować. Sprawdzałem kod pare razy i nic nie znalazłem, dodam, że zanim dodałem hash przy rejestracji, logowanie przechodziło bez problemu.

<?php
	session_start();

	if((isset($_SESSION['zalogowany'])) && ($_SESSION['zalogowany']==true)) //jesli zalogowany to przekieruj
	{
		header('location:profil.php');
		exit();
	}

?>
<html>
	<head>
		<meta charset="utf-8">
		<title>Moba Star	|	Strona głowna</title>
	</head>
	<body>
		<a href="index.php"><h1>Moba Star</h1></a>

		<form method="POST" action="index.php">
			Nick <input type="text" name="nick"><br>
			Hasło <input type="password" name="pass"><br>
			<input type="submit" value="Zaloguj" name="submit">
		</form><br>

		Nie masz konta? <a href="rejestracja.php">Zarejestruj się</a> już teraz!<br>

		<?php //skrypt logowania
			require_once "connect.php";
			$db=mysqli_connect("$host", "$db_user", "$db_password","$db_name");
		

			if(isset($_POST['submit']))
			{
				$nick=$_POST['nick'];
				$pass=$_POST['pass'];

				$nick=htmlentities($nick, ENT_QUOTES,"utf-8"); //zmiana znakow specjanlych na encje 


				if(empty($nick)||empty($pass))
				{
					echo "Nie podano danych logowania";
				}
				else
				{

					if(mysqli_num_rows(mysqli_query($db,
					sprintf("select * from konto where nick='%s'",
					mysqli_real_escape_string($db,$nick) )))>0)
					{
						$qu="SELECT * from konto WHERE nick='$nick'";
						$result=mysqli_query($db,$qu);
						$row=mysqli_fetch_array ($result);

						if (password_verify($pass, $row['pass'])) // weryfikacja hasla 
						{
							$_SESSION['zalogowany']=true;

							$_SESSION['nick']=$nick;

							$id_k=$row['id_konto'];  //uzyskiwanie id konta
							$_SESSION['id_k']=$id_k;

							$qu="SELECT * from pieniadze WHERE id_konto='$id_k'"; //uzyskiwanie ilosci pieniedzy
							$result=mysqli_query($db,$qu);
							$row=mysqli_fetch_array ($result);
							$_SESSION['dolar']=$row['ilosc_dolar'];

							$qu="SELECT * from rola_konta WHERE id_konto='$id_k'"; //uzyskiwanie danych o roli
							$result=mysqli_query($db,$qu);
							$row=mysqli_fetch_array ($result);
							$_SESSION['rola']=$row['rola'];

							
							header('location:profil.php');
						}
						else 
						{
							echo  "Nieprawidłowy login lub hasło";
						}
					}
					else 
					{
						echo  "Nieprawidłowy login lub hasło";
					}
				}
				
				mysqli_close($db);
			}
		?>
	</body>
</html>

Jeśli w if (password_verify($pass, $row['pass']) dodam warunek == false to wystarczy wprowadzenie nicku do zalogowania

komentarz 31 lipca 2020 przez Comandeer Guru (601,450 p.)

A co jest w $row['pass']?

komentarz 31 lipca 2020 przez darekx10 Nowicjusz (120 p.)
Hasło po hashowaniu.
komentarz 31 lipca 2020 przez Comandeer Guru (601,450 p.)
Tak, tak brzmi teoria. A co jest tam faktycznie?
komentarz 31 lipca 2020 przez darekx10 Nowicjusz (120 p.)
No fizycznie w bazie danych jest hasło po hashowaniu. Sprawdzałem przy rejestracji zgodność tego hasła przy pomocy funkcji password_verify() z hasłem nie hashowanym to wartość była true.
komentarz 31 lipca 2020 przez Comandeer Guru (601,450 p.)
Ale ja nie pytam, co jest w bazie, tylko w tej konkretnej zmiennej. Bo może się zapytanie nie udało i tam nic nie ma.
komentarz 31 lipca 2020 przez darekx10 Nowicjusz (120 p.)

Przerabiałem tego if'a tak jak niżej to wypisywała poprawnie hasło z formularza logowania i hasło z bazy.

if (password_verify($pass, $row['pass'])) // weryfikacja hasla 
                        {
                            $_SESSION['zalogowany']=true;
 
                            $_SESSION['nick']=$nick;
 
                            $id_k=$row['id_konto'];  //uzyskiwanie id konta
                            $_SESSION['id_k']=$id_k;
 
                            $qu="SELECT * from pieniadze WHERE id_konto='$id_k'"; //uzyskiwanie ilosci pieniedzy
                            $result=mysqli_query($db,$qu);
                            $row=mysqli_fetch_array ($result);
                            $_SESSION['dolar']=$row['ilosc_dolar'];
 
                            $qu="SELECT * from rola_konta WHERE id_konto='$id_k'"; //uzyskiwanie danych o roli
                            $result=mysqli_query($db,$qu);
                            $row=mysqli_fetch_array ($result);
                            $_SESSION['rola']=$row['rola'];
 
                             
                            header('location:profil.php');
                        }
                        else
                        {
                            echo  $pass."<br>".$row['pass'];
                        }

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 149 wizyt
pytanie zadane 9 marca 2021 w PHP przez niezalogowany
0 głosów
1 odpowiedź 410 wizyt
pytanie zadane 5 listopada 2022 w PHP przez zbiku25 Bywalec (2,940 p.)
0 głosów
0 odpowiedzi 208 wizyt
pytanie zadane 20 maja 2022 w PHP przez AnimaVillis Stary wyjadacz (11,510 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...