Bonjour à tous,
Je pensais régler ce problème en 2 minutes mais non.
Jusqu'à maintenant je ne controlais pas le mot de passe ou son changement.
Je m'y attaque et j'ai mis une nouvelle regle de validation ainsi
Dans mon modele user.php
j'ai cette fonction
public function checkPassword($check){
$ko = '/^\da-xA-Z]/';
$ok = '/^(?=.*\d)(?=.*[a-x])(?=.*[A-Z]).{6,10}$/';
debug($check);
debug($check);
debug(is_string($check));
if( !preg_match($ko, $check) and preg_match($ok, $check) ){
return true;
}else{
return false;
}
}
et cette relgle de valilation
..]
'password' => array(
array(
'rule' =>'notEmpty',
'allowEmpty'=> false,
'message' => "Le mot de passe est obligatoire"
),
'rule' => 'checkPassword',
'message' =>'Le mot de passe doit contenir au moins une majuscule et un chiffre. Il doit aussi avoir entre 6 et 10 caractères'
),
...]
Le problème qui se pose, c'est que ma fonction preg_match()
if( !preg_match($ko, $check) and preg_match($ok, $check) ){
me retourne une erreur, car la variable $check n'est pas une tring
et ceci
debug(is_string($check));
me retourne false
et
debug($check);
me retourne des étoiles.
Je pense que c'est parce que le mot de passe est déjà haché, non?
Avez-vous une idée comment résoudre ce problème?
Pour information, je hache mon mot de passe juste avant de sauver. Soit dans le modele user.php, j'ai cette fonction
function beforeSave($options = array()){
// Si
if(!empty($this->data'User']'password'])){
// Encrypt password
$this->data'User']'password'] = AuthComponent::password($this->data'User']'password']);
//$this->data'User']'password'] = Security::hash($this->data'User']'password']);
return true;
}
// return true;
}
Es-ce que je vous donne assez d'information?
Avez vous une idée qui m'aiderait?
Milles mercis
Mais oui, il y avait ca
'rule' => array('between', 6, 10)
Grrrr.
Merci de m'avoir remis sur le bon chemin et pourquoi je me complique la vie.
Voici le résultat:
'password' => array(
array(
'rule' =>'notEmpty',
'allowEmpty'=> false,
'message' => "Le mot de passe est obligatoire"
),
array(
'rule' => array('between', 6, 10),
'message' =>'Le mot de passe doit avoir entre 6 et 10 caractères'
),
array(
'rule' => '/^(?=.*\d)(?=.*[a-x])(?=.*[A-Z]).*$/', // Controle si au moin 1 chiffre et 1 mujuscule
'message' =>'Le mot de passe doit contenir au moins une majuscule et un chiffre.'
)
),
Merci Lartak11
Je ne comprend pas ce que tu cherches à faire avec ton checkPassword.
Tu cherches à faire une validation juste d'après une chaîne de caractères ou en comparent deux champs mot de passe ?
Non je cherche a verifier le mot de passe qui doit avoir
La condition regex fonctionne bien (je l'ai testée dans un fiocher sépapré) sauf que
debug(is_string($check));
retourne false. Donc avant meme la condition.
Le deuxieme parametre de preg_match() doit être une string
Bonsoir.
Pour le premier point, c'est à dire, entre 6 et 10 caractères, tu ajoute une règle dans ton validate, qui s'appelle between
'rule' => array('between', 6, 10)
Et pour la structure tu fais une règle avec une expression régulière.
Ce n'est pas nécessaire de faire une fonction pour le validate pour ça.