Frage von swobocop, 35

Kennt sich jmd mit password_verify funktion aus?

Hallo zusammen, ich bastel seit paar tagen an einer Homepage. Ich habe ein registrierungs Script geschreiben bei dem das passwort mit der password_hash function gesichert wird. Nun habe ich das Problem, dass beim Login Script das passwort mit der password_verify funktion geprüft wird, immer die ausgabe aus dem else zweig kommt...

Die Scripte habe ich aus folgenden Beispiel:

http://www.php-einfach.de/experte/php-codebeispiele/loginscript/

vllt kennt sich hier jmd gut aus und kann mir weiter helfen.

danke schon mal

Antwort
von DavidHuber, 10

Hallo,

der 2. Wert bei der password_verify() Funktion muss ein Hash-Wert sein, der zuvor mit der Funktion password_hash() erzeugt wurde. Also einfach das Passwort des Users aus der Datenbank "hashen":

$hash = password_hash($user['Password'], PASSWORD_DEFAULT);

VG

David



Kommentar von DavidHuber ,

bzw. andersrum, denke das Passwort wurde als Hashwert in der Datenbank gespeichert. Dann musst du das Passwort aus dem Formular hashen und die Werte bei password_verify() vertauschen:

if(!empty($_POST['submit'])) {

$email = $_POST['logEmail'];
$passwort = password_hash($_POST['logPasswort'], PASSWORD_DEFAULT);

$statement = $pdo->prepare("SELECT * FROM tbluser WHERE EMail = :email");
$result = $statement->execute(array('email' => $email));
$user = $statement->fetch();

$hash = $user['Password'];

if (!is_null($user) && password_verify($hash, $passwort)) {
$_SESSION['userid'] = $user['id'];
die('Login erfolgreich. Weiter zu internen Bereich');
} else {
$errorMessage = "E-Mail oder Passwort war ungültig
";
}

Antwort
von RakonDark, 25

versuchs mal mit

'mysql:host=localhost;dbname=test;charset=utf8'

das problem liegt beim speichern und lesen aus der datenbank , da kein charset angegeben ist kann es durchaus sein das es nicht als utf8 erfolgt.

generell sollten auch die scripte etc alles in UTF8 gespeichert sein , auch die Eingabe in der Form sollte UTF8 sein .

ergo fehlt da noch im html eine meta angabe


<meta charset="utf-8">

Kommentar von maximilianus7 ,

charset spielt hier keine rolle

Kommentar von RakonDark ,

das würde ich aber nicht sagen gerade bei hashing . weil utf8 zeichen ergeben einen anderen hash als latin . ich hatte und viele andere genau den Fall . Und meist ist es auch das problem .

Kommentar von RakonDark ,

na wenn du meinst , ist jedenfalls oft der fall . bitlänge hash und
bitlänge utf8 und schon verifyt es nicht richtig .es wird ja nciht das
hash mit dem wert aus der datenbank gebildet sondern aus dem latin
andere bitlänge verglichen mit utf8 bitlänge . wir sind ja nicht im
ascii modus 

Antwort
von maximilianus7, 17

villeicht soltten wir mal deinen code anschauen können? poste ihn doch mal auf www.paste2.org

Kommentar von swobocop ,

<?php
session_start();

$pdo = new PDO('mysql:host=localhost;dbname=dbmyfood', 'root', '');

if(!empty($_POST['submit'])) {
$email = $_POST['logEmail'];
$passwort = $_POST['logPasswort'];
$statement = $pdo->prepare("SELECT * FROM tbluser WHERE EMail = :email");
$result = $statement->execute(array('email' => $email));
$user = $statement->fetch();
$hash = $user['Password'];

if (!is_null($user) && password_verify($passwort, $hash)) {
$_SESSION['userid'] = $user['id'];
die('Login erfolgreich. Weiter zu internen Bereich');
} else {
$errorMessage = "E-Mail oder Passwort war ungültig
";
}

}

if(!empty($_POST['PWvergessen']))
{
header ("Location: passwortvergessen.php");

}
if(!empty($_POST['registrieren']))
{
header("Location: ../Registrieren/Registrieren.php");
}

?>

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten