Hallo vapita,
einerseits kannst Du direkt mit $_GET
oder $_POST
arbeiten, wie Tom vorschlug, aber wenn es für Dich Gründe gibt, dieses $userData
Array zu verwenden (z.B. weil es ein Parameter für deine Methode ist), dann solltest Du die isset
-Abfrage an der Stelle machen, wo Du die $_POST
-Daten nach $userData überträgst.
Denn andernfalls kommt die blöde Notice, dass Du auf einen undefinierten Key zugreifst, beim Übertragen nach $userData.
Aber da hab ich grad was gelernt: Ab PHP 7 gibt es den "null coalescing operator" ??
. Der beinhaltet eine isset Abfrage!
$_POST['password'] ?? ""
liefert den geposteten Wert des Passworts, und wenn die POST-Daten keinen Eintrag für password enthalten, sorgt ?? zum einen dafür, dass die Notice nicht kommt, und zum anderen setzt er "" als Ersatzwert.
Also, wenn Du PHP 7 aufwärts verwendest, kannst Du es so machen:
$userData['password'] = $_POST['password'] ?? "";
$userData['password_check'] = $_POST['password_check'] ?? "";
und hast für fehlende Passworte einen Leerstring in $userData stehen.
Beim Hashen würde ich dann als erstes die Gleichheit testen, und zwar ohne mir die Mühe zu machen, das check-Passwort in eine Variable zu laden. Danach muss die erforderliche Passwordkomplexität geprüft werden (lang genug, Zeichenmix), und DANN kann man hashen. Hier wäre meine Frage, was dein passwordEncoder Objekt tut. Ist das was selbstgemachtes? Oder nur eine Hülle um die eingebaute password_hash Funktion von PHP? Wenn es nicht password_hash ist: Wegschmeißen. In PHP selbstgebautes Hashing ist entweder zu trivial oder zu langsam, und die älteren Passwortfunktionen sind unsicher. Wenn Du crypt() verwendest, ok, das tut password_hash auch, aber letztere sorgt für starkes Salz und bietet mit password_verify und password_needs_rehash sinnvolle Tools dazu. Falls Du md5() verwendest: Nein. Zu unsicher.
$password = $userData['password'];
if($password !== $userData['passwordCheck']) {
$this->flash->add('Die Passwörter stimmen nicht überein!','danger');
break;
}
if (!$this->verifyPasswordComplexity($password)) {
$this->flash->add('Das Password ist nicht stark genug!','danger');
break;
}
$passwordHashed = password_hash($password); // reicht!
$newUser->setPassword($passwordHashed);
(Wieso eigentlich break? Läuft das in einer Schleife?! Benutzt Du eine Schleifenkonstruktion, um einen GOTO zu simulieren?)
Rolf
sumpsi - posui - obstruxi