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.
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>
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
PHP-Code:
if (password_verify($passwortdb, $hash){
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