Warum ist die CakePHP Authentifizierungskomponente mein Passwort nicht Hashing?
-
03-07-2019 - |
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?
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 wirdIch 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.
Leider kann ich alles tun, nicht aber Punkt, der Sie in der richtigen Richtung. Ich bin neu in CakePHP.