CakePHP 2: Anular el método de "contraseña" de AuthComponent

Mi objetivo es tener una sal única para cada usuario en lugar de solo usarConfigure::read('Security.salt') para cada usuario

Sé que CakePHP 2.x ya no hace hash de contraseñas automáticamente. Esto me permite realizar la validación del modelo en las contraseñas, lo cual es muy bueno. Sin embargo, no veo una manera de anular el método de "contraseña" de AuthComponent. Por lo tanto, aunque puedo controlar cómo las contraseñas se procesan antes de guardarlas en la base de datos, no puedo controlar cómo se hacen las contraseñas al realizar el inicio de sesión real. Del libro de cocina:

No necesita cifrar las contraseñas antes de llamar$this->Auth->login().

Que puedo hacer para hacer$this->Auth->login() utilizar un método personalizado de hashing de contraseña?

Gracias.

ACTUALIZAR: Terminé yendo con la respuesta del Dr. Hannibal Lecter (creando un objeto de autenticación personalizado). Aquí está cómo hacerlo:

Código antiguo:

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

Nuevo código (cambie "Formulario" a "Personalizado"):

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

Cree "app / Controller / Component / Auth / CustomAuthenticate.php" y haga que se vea así:

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

class CustomAuthenticate extends FormAuthenticate {
}

Copie los métodos "_findUser" y "_password" de "lib / Cake / Controller / Component / Auth / BaseAuthenticate.php" y péguelos en la clase "CustomAuthenticate". Luego realice las siguientes dos modificaciones al método "_findUser":

Elimine esta línea de la matriz "$ conditions":$model . '.' . $fields['password'] => $this->_password($password),

Cambioif (empty($result) || empty($result[$model])) { aif (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {

Luego realice las siguientes dos modificaciones al método "_password":

Crea el parámetro "$ id" cambiandoprotected function _password($password) { aprotected function _password($password, $id) {

Actualiza el valor de sal cambiandoreturn Security::hash($password, null, true); areturn Security::hash($password, null, Configure::read('Security.salt') . $id);

Por último, actualizar todas las apariciones deAuthComponent::password usarSecurity::hash Con la misma lógica que arriba.

Respuestas a la pregunta(4)

Su respuesta a la pregunta