Stai utilizzando AuthComponent? Si noti che blocca tutti i campi password in entrata (ma non i campi "conferma password", verificare con debug($this->data)
), in modo che i campi non siano mai gli stessi. Read the manual and use AuthComponent::password
per fare il controllo.
Detto questo, ecco qualcosa che uso:
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'.");
}
}
Questo è un male per i seguenti motivi:
- Ha accoppiamento stretto alla forma, si aspetta sempre un campo
password_control
a essere presenti. Devi utilizzare la whitelist del campo o disabilitare la convalida se non ne hai uno nei tuoi dati, ad esempio $this->User->save($this->data, true, array('field1', 'field2'))
.
- Manca la password manualmente come fa AuthComponent (poiché non vi è un accesso pulito ai componenti dal modello). Se si modifica l'algoritmo utilizzato in AuthComponent, è necessario modificarlo anche qui.
Detto questo, convalida in modo trasparente e genera messaggi di errore corretti per entrambi i campi di controllo password e password senza richiedere alcun codice aggiuntivo nel controller.
è '$ this-> datadata' previsto? Se no, c'è il tuo problema. – Stephen
Ho corretto il codice sopra riportato per rimuovere i dati extra ancora ottengo l'errore – aWebDeveloper
Posso vedere il modulo html che pubblica i dati? – Stephen