Chodzi o to, że… Powinieneś przechowywać solone, haszowane hasła
w bazie danych. Ponieważ są one pojedynczo solone na użytkownika/hasło, nie możesz wyszukaj je bezpośrednio za pomocą password = ?
, ponieważ nie znasz soli i dlatego nie możesz z góry obliczyć pasującego haszu. Jeśli robisz to właściwie, musisz najpierw pobierz rekord użytkownika według nazwy użytkownika, a następnie zweryfikuj skrót hasła przy użyciu pobranej soli/hasz. Pseudokod:
$user = fetch_from_database($_POST['username']);
if (!$user) {
throw new Exception("User doesn't exist");
}
if (!password_verify($_POST['password'], $user['password_hash'])) {
throw new Exception('Invalid password');
}
echo 'Welcome ', $user['name'];
Zobacz http://php.net/password_hash , http://php.net/password_verify .