¿Está utilizando AuthComponent? Tenga en cuenta que contiene todos los campos de contraseña entrante (pero no los campos de "contraseña confirmada", consulte con debug($this->data)
), por lo que los campos nunca serán los mismos. Read the manual and use AuthComponent::password
para hacer el control.
Dicho esto, aquí hay algo que utilizo:
public $validate = array(
'password' => array(
'confirm' => array(
'rule' => array('password', 'password_control', 'confirm'),
'message' => 'Repeat password',
'last' => true
),
'length' => array(
'rule' => array('password', 'password_control', 'length'),
'message' => 'At least 6 characters'
)
),
'password_control' => array(
'notempty' => array(
'rule' => array('notEmpty'),
'allowEmpty' => false,
'message' => 'Repeat password'
)
)
);
public function password($data, $controlField, $test) {
if (!isset($this->data[$this->alias][$controlField])) {
trigger_error('Password control field not set.');
return false;
}
$field = key($data);
$password = current($data);
$controlPassword = $this->data[$this->alias][$controlField];
switch ($test) {
case 'confirm' :
if ($password !== Security::hash($controlPassword, null, true)) {
$this->invalidate($controlField, 'Repeat password');
return false;
}
return true;
case 'length' :
return strlen($controlPassword) >= 6;
default :
trigger_error("Unknown password test '$test'.");
}
}
Esto es malo para las siguientes razones:
- Ha acoplamiento ajustado a la forma, siempre espera un campo
password_control
a estar. Debe utilizar la lista blanca de campos o deshabilitar la validación si no tiene una en sus datos, es decir: $this->User->save($this->data, true, array('field1', 'field2'))
.
- Manualmente hash la contraseña de la forma en que lo hace AuthComponent (ya que no hay acceso limpio a los componentes del modelo). Si cambias el algoritmo utilizado en AuthComponent, debes cambiarlo aquí también.
Habiendo dicho esto, valida de forma transparente y produce mensajes de error adecuados para los campos de contraseña y control de contraseña sin requerir ningún código adicional en el controlador.
es '$ this-> datadata' previsto? Si no, ahí está tu problema. – Stephen
he reparado el código anterior para eliminar los datos adicionales, aún recibo el error – aWebDeveloper
¿Pude ver el formulario html que publica los datos? – Stephen