I have a problem with trying to login using the saved hash from my database, I save my password the following way, which works fine:
adduser($conn, '3', $username, $password);
This calls the following function:
function adduser ($conn, $level, $username, $password)
{
$password = mysqli_real_escape_string($conn, $password);
$password = mysqli_real_escape_string($conn, $username);
$password = password_hash($password, PASSWORD_BCRYPT);
$user = "INSERT INTO users (level, username, password)
VALUES ('$level', '$username', '$password')";
mysqli_query($conn, $user) or die (mysqli_error($conn));
}
My password field is a CHAR(60)
so the stored password hash should be the right size.
When I try to login I call this function:
if (login($conn, $username, $password) === true){
}
Which exists here:
function login ($conn, $username, $password)
{
$password = mysqli_real_escape_string($conn, $password);
$username = mysqli_real_escape_string($conn, $username);
$query = "SELECT password FROM `users` WHERE username='$username'";
$result = mysqli_query($conn, $query) or die(mysqli_error($conn));
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$hash = $row["password"];
$verify = password_verify($password, $hash);
if ($verify)
{
return true;
}
else
{
return false;
}
}
My issue is that it never returns true or false, which makes it impossible for me to login...
Extra: It succesfully post to database
I also tried running this, which succesfully posted the data from my database
$query = "SELECT password FROM `users` WHERE username='$username'";
$result = mysqli_query($conn, $query) or die(mysqli_error($conn));
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
echo $row["password"];
Update
Doing this:
echo '<br/>';
echo $hash;
echo '<br/>';
echo $password;
Gives me the following output:
$2y$10$OfJhVve4GMZRfjfelb8sNOJ7EN5NAAGOmsN6OS/SC7PZGU5mDNOou
hej
Which matches the password in my database
$2y$10$OfJhVve4GMZRfjfelb8sNOJ7EN5NAAGOmsN6OS/SC7PZGU5mDNOou