Puede ejecutar en otro problema por el camino con la validación de contraseña CakePHP.
El problema es que las contraseñas hash pastel primero, luego hace la validación, lo que puede hacer que la entrada falle incluso si es válida de acuerdo con sus reglas. Es por eso que la contraseña se devuelve al campo de entrada hash en lugar de normal.
de solucionar este problema, en lugar de utilizar el nombre del campo especial 'contraseña', utiliza un nombre diferente, como 'tmp_pass'. De esta forma, CakePHP Auth no automáticamente reducirá el campo.
Aquí está un ejemplo de formulario
echo $form->create('Vendor', array('action' => 'register'));
echo $form->input('email');
echo $form->input('tmp_pass', array('label' => 'Password','type'=>'password'));
echo $form->end('Register');
En su modelo de proveedor, no asigne reglas de validación a 'password' en lugar asignar estas normas a 'tmp_pass', por ejemplo
var $validate = array('email' => 'email', 'password' => ... password rules...);
se convierte en
var $validate = array('email' => 'email', 'tmp_pass' => ... password rules...);
Finalmente, en su modelo de proveedor, implemente beforeSave().
Primero, compruebe si los datos validan ('tmp_pass' se validará según sus reglas).
Si tiene éxito, manualmente hash tmp_pass y póngalo en $ this-> data ['Vendor'] ['password'] y luego devuelva true. Si no tiene éxito, devuelve falso.
function beforeSave() {
if($this->validates()){
$this->data['Vendor']['password'] = sha1(Configure::read('Security.salt') . $this->data['User']['tmp_pass']);
return true;
}
else
return false;
}
+1 - esto fue muy útil para mí también, sin embargo, sugiero usar las funciones correctas 'Auth-> password()' o 'Auth-> hashPasswords()' que salarte y machacarte a ti mismo. – nickf
Deberías ** no ** hash la contraseña tú mismo con 'sha1', ya que ** puede ** introducir inconsistencias con la forma' Auth' (si eso es lo que estás usando) hash la contraseña en el camino. Use '$ this-> Auth-> password()' en su lugar! – deceze
@deceze, mirando la fuente, 'Auth :: hashPasswords()' llamará a la función 'User :: hashPassword()' si está definida, mientras que 'Auth :: password()' no lo hará. – nickf