Frage

Ich bin mit CakePHP 1.2 mit Auth und ACL-Komponenten.

In meinem Benutzerregister Aktion wird das Passwort in ungehashte kommen. Insbesondere dieser Ausdruck:

if ($this->data['User']['password'] !=
    $this->Auth->password($this->data['User']['confirm_password']))

Dies ist auf true Auswertung, auch wenn ich die gleichen Werte für password und confirm_password einreichen. Ich weiß, dass Passwort ungehashte, weil, wenn ich den Anruf entfernen, um Auth->password, der Ausdruck falsch ergibt.

ich erwartete, dass der Auth-Modul automatisch die Passwort-Hash. Was mache ich falsch?

Hier ist meine Ansicht:

<?php
    echo $form->create('User', array('action' => 'register'));

    echo $form->input('email',
                      array('after' => $form->error(
                        'email_unique', 'This email is already registered.')));
    echo $form->input('password');
    echo $form->input('confirm_password', array('type' => 'password'));
    echo $form->end('Register');
?>

Hier ist meine Register Aktion des Benutzers Controller:

function register(){
    if ($this->data) {
        if ($this->data['User']['password'] !=
            $this->Auth->password($this->data['User']['confirm_password'])) {

            $this->Session->setFlash(__('Password and Confirm Password must match.', true));
            $this->data['User']['password'] = '';
            $this->data['User']['confirm_password'] = '';
        }
        else{
            $this->User->create();
            if ($this->User->save($this->data)){
                $this->redirect(array('action' => 'index'), null, true);
            }
            else {
                $this->data['User']['password'] = '';
                $this->data['User']['confirm_password'] = '';
                $this->Session->setFlash(__('Some problem saving your information.', true));
            }
        }
    }
}

Und hier ist mein appController, wo ich die Auth und Acl Module umfassen:

class AppController extends Controller {
    var $components = array('Acl', 'Auth');

    function beforeFilter(){
        if (isset($this->Auth)) {
            $this->Auth->allow('display');
            $this->Auth->fields =
              array(
                'username' => 'email',
                'password' => 'password');
            $this->Auth->authorize = 'actions';
        }
    }
}

Was mache ich falsch?

War es hilfreich?

Lösung

CakePHP die Passwörter Hash, es sei denn Benutzername einen übermittelten Wert enthält. Ersetze ich den Benutzernamen Feld mit E-Mail. Allerdings remapped ich diese Felder durch das Auth-> Felder Array festlegen. Aber ich tat, dass in dem AppController statt Usercontroller. So bewegen Sie diese Zeile:

$this->Auth->fields = array('username' => 'email', 'password' => 'password');

aus AppController in Usercontroller es gelöst.
Nun wird die Frage „Warum kann ich nicht zurück die Auth-> Felder in AppController?“

Andere Tipps

Du bist wahrscheinlich zwingende AppController::beforeFilter() mit Ihrem UsersController::beforeFilter().

zu „reparieren“ es nur parent::beforeFilter() am Anfang der Funktion setzen.

Sie sollten Passwort-Hash, bevor Datenbank zu speichern. Setzen Sie diese Funktion in Ihrem User-Modell:

function beforeSave() {
  if(isset($this->data[$this->alias]['password']))
    $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'], null, true);
  return true;
}

Und vergessen Sie nicht, diese an die Benutzer-Controller in beforeFilter() zu setzen:

if(in_array($this->action, array('register'))) {
  $this->Auth->fields = array('username' => 'email', 'password' => 'wrongfield');
}

Das bedeutet, dass Passwort nicht bei der Registrierung Prozess (im Fall gescheiterten Validierung des Register Form).

gehasht wird

Ich glaube, Sie suchen

hashPasswords ($data)

Blick auf diesen Seiten. Sie sollten Sie in die richtige Richtung weisen. Sie können auch versuchen, Ihre Debug-Ebene in der Kernkonfigurationsdatei zu ändern. es von 0 (Produktion) bis 3 Ändern ermöglicht es Ihnen, Sie SQL-Ausgabe zu sehen. kann hilfreich sein.

Auth Komponente-Methoden

CakePHP Fehlerbehebung

Leider kann ich alles tun, nicht aber Punkt, der Sie in der richtigen Richtung. Ich bin neu in CakePHP.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top