Hallo Leute,
ich habe ein Problem damit eine Passwortabfrage durchzuführen, um anschließend das Passwort ändern zu lassen. Nachfolgend die betreffende PHP-Datei mit HMTL-Formular.
Das Ganze scheitert bei "if ($passwortdb == $hash)" hier wird der Hashwert aus der Datenbank, den ich mit "$hash = password_hash($passwort, PASSWORD_DEFAULT);" in einem anderen Script zur User-Generierung erzeugt hatte. Die Benutzer können sich auch einloggen und haben dann auch eine Session-ID.
Auch
schlägt fehl.
Irgendwie erzeugt password_hash() keinen identischen Hashwert mit demselben Passwort.
Gibt dazu eine Lösung oder eine andere Möglichkeit der Passwortverifierung?
Vielen Dank
Diani
ich habe ein Problem damit eine Passwortabfrage durchzuführen, um anschließend das Passwort ändern zu lassen. Nachfolgend die betreffende PHP-Datei mit HMTL-Formular.
PHP-Code:
<?php
session_start();
if(!isset($_SESSION['userid'])) {
header("Location: http://www.example.de/login.php");
}
error_reporting(E_ALL);
ini_set("display_errors", 1);
include('config.inc.php');
$userid = $_SESSION['userid'];
date_default_timezone_set("Europe/Berlin");
$timestamp = time();
$changed = date("Y-m-d - H:i:s",$timestamp);
if (isset($_POST["gesendet"])) {
$con = mysqli_connect($db_server, $db_dbuser, $db_dbpasswd);
mysqli_select_db($con, $db_dbname);
$passwort1 = $_POST["passwort1"];
$passwort2 = $_POST["passwort2"];
$hash = password_hash($passwort2, PASSWORD_DEFAULT);
//Überprüfung des Passworts
$res = mysqli_query($con, "SELECT * FROM BenutzerTabelle");
$num = mysqli_num_rows($res);
while ($dsatz = mysqli_fetch_assoc($res))
{
$passwortdb = $dsatz["passwort"];
}
$passwortakt = $_POST["passwortakt"];
if ($passwortdb == $hash){
echo "<div class=\"alert alert-success\" role=\"alert\">";
echo "<b>Ihr Passwort wurde erfolgreich geändert!</b>";
echo "</div>";
} else {
echo "<div class=\"alert alert-danger\" role=\"alert\">";
echo "<b>Ihr Passwort stimmt nicht! </b>";
echo "<br> $passwortdb = $hash ";
echo "</div>";
}
//Setzen des neuen Passworts
if ($passwort1 == $passwort2) {
$sql = "UPDATE BenutzerTabelle SET passwort = '$hash', updated_at = '$changed' WHERE uid = '$userid'";
mysqli_query($con, $sql);
$num = mysqli_affected_rows($con);
if ($num>0)
{
echo "<div class=\"alert alert-success\" role=\"alert\">";
echo "<b>Ihr Passwort wurde erfolgreich geändert!</b>";
echo "</div>";
}
else
{
echo "<div class=\"alert alert-danger\" role=\"alert\">";
echo "<b>Es ist ein Fehler aufgetreten, ";
echo "das Passwort konnte nicht geändert werden!</b>"
echo "</div>";
}
} else {
echo "<div class=\"alert alert-danger\" role=\"alert\">";
echo "<b>Die beiden Passwörter sind nicht identisch! </b>";
echo "</div>";
}
mysqli_close($con);
}
?>
HTML-Code:
<form action = "changePassword.php" method = "post"> <div class="col-md-4"> <div class="form-group"> <label for="passwortakt" class="custom-control-label">Aktuelles Passwort</label> <input type="password" class="form-control" size="40" maxlength="250" name="passwortakt"> </div> <div class="form-group"> <label for="passwort1" class="custom-control-label">Neues Passwort</label> <input type="password" class="form-control" size="40" maxlength="250" name="passwort1"> </div> <div class="form-group"> <label for="passwort2" class="custom-control-label">Passwort wiederholen</label> <input type="password" class="form-control" size="40" maxlength="250" name="passwort2"> </div> </div> <input class="btn btn-primary" type="submit" name="gesendet" value="Passwort ändern"/> </div> </form>
Auch
PHP-Code:
if (password_verify($passwortdb, $hash){
Irgendwie erzeugt password_hash() keinen identischen Hashwert mit demselben Passwort.
Gibt dazu eine Lösung oder eine andere Möglichkeit der Passwortverifierung?
Vielen Dank
Diani
Kommentar