Hallo,
Nachdem mir empfohlen wurde mich in ein PHP Framework einzuarbeiten, bin ich gerade dabei mit Laravel herumzuspielen. Nun habe ich eine einfache Registrierung programmiert, wobei ein "UsersController" mit der Methode "store" das speichern übernimmt.
Dieser sieht folgendermaßen aus:
Das User-Model enthält die Validation:
Mein Problem nun:
Wenn ein User sein Profil editiert, das Passwort dabei aber nicht ändert liegt das verhashte Passwort in $this->attributes["password"], wird also nocheinmal verhashet. Hat jemand eine Idee wie ich das elegant umgehen kann? Mein erster Gedanke war wenn die Länge > 20 ist (gleichzeitig Länge des Passworts auf 20 begrenzen) einfach zu sagen es ist schon ein Hash und nicht mehr verhashen. Aber das ist alles andere als sauber.
Sollte ich die Validation überhaupt woanders hinpacken? Ich habe zumindest gelesen, dass der Controller möglichst wenig Logik enthalten soll.
Ich bin für jeden Tipp dankbar!
lg
Manuel
Nachdem mir empfohlen wurde mich in ein PHP Framework einzuarbeiten, bin ich gerade dabei mit Laravel herumzuspielen. Nun habe ich eine einfache Registrierung programmiert, wobei ein "UsersController" mit der Methode "store" das speichern übernimmt.
Dieser sieht folgendermaßen aus:
PHP-Code:
class UsersController extends \BaseController {
//...
//...
public function store()
{
$input = Input::all();
if ( ! $this->user->fill($input)->isValid())
{
return Redirect::back()->withInput()->withErrors($this->user->errors);
}
$this->user->save();
return Redirect::route('users.index');
}
PHP-Code:
class User extends Eloquent implements UserInterface, RemindableInterface {
public function isValid()
{
$validation = Validator::make($this->attributes, static::$rules);
$this->hashPassword();
if($validation->passes()) return true;
$this->errors = $validation->errors();
return false;
}
public function hashPassword()
{
// TODO Prevent from double hashing!
$this->attributes["password"] = Hash::make($this->attributes["password"]);
}
Wenn ein User sein Profil editiert, das Passwort dabei aber nicht ändert liegt das verhashte Passwort in $this->attributes["password"], wird also nocheinmal verhashet. Hat jemand eine Idee wie ich das elegant umgehen kann? Mein erster Gedanke war wenn die Länge > 20 ist (gleichzeitig Länge des Passworts auf 20 begrenzen) einfach zu sagen es ist schon ein Hash und nicht mehr verhashen. Aber das ist alles andere als sauber.
Sollte ich die Validation überhaupt woanders hinpacken? Ich habe zumindest gelesen, dass der Controller möglichst wenig Logik enthalten soll.
Ich bin für jeden Tipp dankbar!
lg
Manuel
Kommentar