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

Password_verify nie działa

Aruba Cloud - Virtual Private Server VPS
0 głosów
444 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 (606,550 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 (606,550 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 (606,550 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ź 248 wizyt
pytanie zadane 9 marca 2021 w PHP przez niezalogowany
0 głosów
1 odpowiedź 764 wizyt
pytanie zadane 5 listopada 2022 w PHP przez zbiku25 Gaduła (3,000 p.)
0 głosów
0 odpowiedzi 295 wizyt
pytanie zadane 20 maja 2022 w PHP przez AnimaVillis Stary wyjadacz (13,090 p.)

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,662 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!

...