Empfehlungen: Erweiterte Suche

Beim Update, das Passwordfeld in Ruhe lassen...

Daten auslesen, verarbeiten und den Views übergeben

Re: Beim Update, das Passwordfeld in Ruhe lassen...

Beitragvon Luckie » Di 27. Okt 2009, 10:24

Mathias hat geschrieben:Wichtig ist, dass du das Eingabefeld nicht password nennst, wenn du ein nicht gehashtes Passwort willst. Nenn es new_password oder so.
In der Datenbank kann es weitehrin password heißen.

Hier ist der Codeschnipsel, der eigentlich relevant ist. Das ist eigentlich straight forward :geek:
Code: Alles auswählen
          if (empty($this->data['User']['new_password'])) {
                unset($this->User->validate['new_password']);
            } else {
                $this->data['User']['password'] = $this->Auth->password($this->data['User']['new_password']);
            }


Es wird mir wohl nicht viel anderes übrigbleiben, als zu versuchen das hinbzubekommen. :( Danke schon mal für die Hilfe.

Und zu der E-Mail-Überprüfung: Ich bin immer noch der Meinung, dass du die E-Mail im Model validieren solltest und nicht im Controller.
Probier doch mal im Model die E-Mail auf unique zu validieren.

Zu dem Zeitpunkt, wusste ich noch nicht, wie das geht. Mal sehen hier im Buch habe ich was gefunden, mal sehen, ob das funktioniert.

Jetzt kam mir aber noch die Frage, warum du die Adresse nur bei add überprüfst. Danach könnte ich dann einfach eine schon verwendete E-Mail-Adresse eintragen? :shock:

Nachlässigkeit, an die andere Möglichkeit habe ich gar nicht gedacht. Ich glaube immer noch an das Gute im Menschen. ;)
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Beim Update, das Passwordfeld in Ruhe lassen...

Beitragvon enigmartin » Di 29. Mär 2011, 12:44

Ich habe diese Thema mal dazu benutzt um dieses Problem bei mir ebenfals auszumerzen. Mit Erfolg und ein wenig einfacher wie ich finde. Das Prinzip ist das gleiche, nur habe ich im Controller nicht so viel ändern müssen.

Ich habe dieses Thema intensiv überflogen, aber dennoch überflogen. Mir ging es erstmal nur um den edit eines Users und das klappt bei mir jetzt hervorragend. Ich habe in den unten aufgeführten Beispielen nur das nötigste gezeigt. Für einen funktionierenden Ablauf fehlen da natürlch noch einige Routinen, die ich aber durch cake bake erstellt habe. Ich denke das ist selbstredent.

Mein Controller (users_controller.php):
Code: Alles auswählen

function edit($id = null) {
    // Hier steht in der Regel noch was
    if (!empty($this->data)) {
        if( !empty( $this->data['User']['new_password'] ) )
        {
            // Das neue Passwort wird aus $this->data geholt und
            // dem originalen Passwort zum speichern übergeben
            $this->data['User']['password'] = $this->data['User']['new_password'];
            // Auch die Passwort Bestätigung wird übergeben,
            // damit das Passwort auch richtig abgeglichen wird
            $this->data['User']['password_confirmation'] = $this->data['User']['new_password_confirmation'];
        }
        else
        {
            unset( $this->User->validate['new_password'] );
        }
        // Hier steht in der Regel noch was
    }
    // Hier steht in der Regel noch was
}
 

Mein Model (user.php):
Code: Alles auswählen

// Hier steht in der Regel noch was
var $validate = array(
    // Für add/register
    'password' => array(
        'between' => array(
            'rule' => array('between', 5, 15),
            'message' => 'The password must be between 5 and 15 characters.'
        ),
        'matchPasswords' => array(
            'rule' => 'matchPasswords',
            'message' => 'Password do not match'
        )
    ),
    // Für die edit
    'new_password' => array(
        'between' => array(
            'rule' => array('between', 5, 15),
            'message' => 'The password must be between 5 and 15 characters.'
        ),
        'matchNewPasswords' => array(
            'rule' => 'matchNewPasswords',
            'message' => 'New password do not match'
        )
    )
);

// Prüft ob Passwort mit Passwort-Bestätigung übereinstimmt (add/register)
function matchPasswords( $data )
{
    if( $data['password'] == $this->data['User']['password_confirmation'])
    {
        return true;
    }
    else
    {
        $this->invalidate('password_confirmation', 'Passwords do not match');
        return false;
    }
}

// Prüft ob neues Passwort mit neuer Passwort-Bestätigung übereinstimmt (edit)
function matchNewPasswords( $data )
{
    if( $data['new_password'] == $this->data['User']['new_password_confirmation'])
    {
        return true;
    }
    else
    {
        $this->invalidate('new_password_confirmation', 'New passwords do not match');
        return false;
    }
}
// Hier steht in der Regel noch was
 

Mein view (edit.ctp):
Code: Alles auswählen

// Hier steht in der Regel noch was
$this->Form->input('new_password', array('label' => 'Password', 'type' => 'password') );
$this->Form->input('new_password_confirmation', array('label' => 'Password Confirmation', 'type'=>'password'));
// Hier steht in der Regel noch was
 

Sollte in dem ganzen irgendein Fehler sein, oder irgendeine Sicherheitslücke, dann wäre ich über einen Hinweis erfreut. Bin relativ neu in Sachen CakePHP.
Benutzeravatar
enigmartin
 
Beiträge: 39
Registriert: So 27. Mär 2011, 10:42
CakePHP-Version: 1.3.8
OS: Windows 7

Vorherige

Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron