CakePHP 2: Überschreibe die "Passwort" -Methode von AuthComponent

Mein Ziel ist es, jedem Benutzer ein einzigartiges Salz zu bieten, anstatt es nur zu verwendenConfigure::read('Security.salt') für jeden Benutzer.

Ich weiß, dass CakePHP 2.x Passwörter nicht mehr automatisch hascht. Dies ermöglicht mir die Modellüberprüfung von Passwörtern, was sehr schön ist. Ich sehe jedoch keine Möglichkeit, die "password" -Methode von AuthComponent zu überschreiben. Obwohl ich also steuern kann, wie Kennwörter gehasht werden, bevor sie in der Datenbank gespeichert werden, kann ich nicht steuern, wie Kennwörter gehasht werden, wenn die eigentliche Anmeldung durchgeführt wird. Aus dem Kochbuch:

Sie müssen keine Passwörter hashen, bevor Sie anrufen$this->Auth->login().

Was kann ich tun, um zu machen$this->Auth->login() Verwenden Sie eine benutzerdefinierte Methode zum Hashing von Passwörtern?

Vielen Dank.

AKTUALISIEREN: Am Ende habe ich die Antwort von Dr. Hannibal Lecter (Erstellen eines benutzerdefinierten Authentifizierungsobjekts) erhalten. So geht's:

Alter Code:

$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));

Neuer Code (ändern Sie "Form" in "Custom"):

$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));

Erstellen Sie "app / Controller / Component / Auth / CustomAuthenticate.php" und lassen Sie es so aussehen:

<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');

class CustomAuthenticate extends FormAuthenticate {
}

Kopieren Sie die Methoden "_findUser" und "_password" aus "lib / Cake / Controller / Component / Auth / BaseAuthenticate.php" und fügen Sie sie in die Klasse "CustomAuthenticate" ein. Nehmen Sie dann die folgenden zwei Änderungen an der Methode "_findUser" vor:

Entfernen Sie diese Zeile aus dem Array "$ conditions":$model . '.' . $fields['password'] => $this->_password($password),

Veränderungif (empty($result) || empty($result[$model])) { zuif (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {

Nehmen Sie dann die folgenden zwei Änderungen an der Methode "_password" vor:

Erstellen Sie den Parameter "$ id" durch Ändernprotected function _password($password) { zuprotected function _password($password, $id) {

Aktualisieren Sie den Salzwert durch Ändernreturn Security::hash($password, null, true); zureturn Security::hash($password, null, Configure::read('Security.salt') . $id);

Zuletzt aktualisieren Sie alle Vorkommen vonAuthComponent::password benutzenSecurity::hash mit der gleichen Logik wie oben.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage