Mi objetivo es tener una sal única para cada usuario en lugar de solo usar Configure::read('Security.salt')
para cada usuario.CakePHP 2: anula el método de "contraseña" de AuthComponent
Sé que CakePHP 2.x ya no tiene contraseñas hash automáticamente. Esto me permite realizar la validación del modelo en contraseñas, lo cual es muy bueno. Sin embargo, no veo una manera de que pueda anular el método de "contraseña" de AuthComponent. Así que, aunque puedo controlar cómo se codifican las contraseñas antes de que se guarden en la base de datos, no puedo controlar cómo se codifican las contraseñas cuando se realiza el inicio de sesión real. Del libro de cocina:
No es necesario para cifrar las contraseñas antes de llamar
$this->Auth->login()
.
¿Qué puedo hacer para que $this->Auth->login()
usan un método personalizado de hash de la clave?
Gracias.
ACTUALIZACIÓN: Terminé yendo con la respuesta del Dr. Hannibal Lecter (creando un objeto de autenticación personalizado). He aquí cómo hacerlo:
Código antiguo:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
nuevo código (modificar "Formulario" en "Usuario"):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
Crear "app/Controlador/Componente/autenticación/CustomAuthenticate.php "y hacer que se vea como esto:
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class CustomAuthenticate extends FormAuthenticate {
}
Copiar la "_findUser" y "" métodos de" _password lib/torta/controlador/Com ponent/Auth/BaseAuthenticate.php "y pégalos en la clase" CustomAuthenticate ". A continuación, realice los siguientes dos modificaciones al método "_findUser":
Poner esta línea desde el "$ condiciones" matriz:
$model . '.' . $fields['password'] => $this->_password($password),
Cambio
if (empty($result) || empty($result[$model])) {
aif (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {
luego hacer las siguientes dos modificaciones al método "_password":
Crear el parámetro "$ id" cambiando
protected function _password($password) {
aprotected function _password($password, $id) {
actualizar el valor de la sal cambiando
return Security::hash($password, null, true);
areturn Security::hash($password, null, Configure::read('Security.salt') . $id);
Por último, actualizar todas las apariciones de AuthComponent::password
utilizar Security::hash
con la misma lógica que encima.
¡Eso funcionó! Actualicé mi pregunta con el código correspondiente. ¡Gracias! – Nick