2010-06-30 6 views
1

Comment effectuer des vérifications de validation sur un champ de mot de passe dans CakePHP, vu que le mot de passe est haché avant que j'aie pu exécuter des vérifications?Valider les mots de passe avec CakePHP 1.3

+0

J'ai besoin qu'il soit validé avant son hashed. La principale chose que je veux vérifier est sa longueur. – chustar

+0

Je n'ai pas utilisé cakePHP mais ne pouvez-vous pas utiliser la même fonction de hachage sur votre entrée, puis la comparer au mot de passe haché qui est stocké? – Catfish

Répondre

3

, vous devrez create a custom hash function que ce soit ne fait rien, ou, mieux, conserve quelque part le mot de passe d'origine.

Probablement si vous avez deux champs de mot de passe dans votre formulaire où l'utilisateur est nécessaire pour confirmer le mot de passe. Dans ce cas, vous effectuez vos règles de validation de mot de passe sur le deuxième champ de mot de passe. Cela peut se produire automatiquement dans une règle de validation personnalisée, rappelez-vous que vous avez accès à tous les autres champs d'une fonction de validation via $this->data. Vous pouvez ensuite confirmer que les deux mots de passe sont identiques à described here.

+0

Le problème que je semble avoir, c'est que le mot de passe est haché avant d'arriver à l'étape de validation, de sorte que les validations que je lance s'appliquent uniquement au mot de passe haché. – chustar

+0

@chustar C'est pourquoi vous faites la validation ** sur le champ 'password2', ** qui n'est pas automatiquement haché. – deceze

+0

Cet article explique comment créer une fonction de hachage personnalisée, comme le mentionne Deceze, pour contourner ce problème: http://teknoid.wordpress.com/2008/10/08/demystifying-auth-features-in-cakephp-12/(Commencez à lire le deuxième exemple de code.) – deizel

0

Il fonctionne de cette façon pour moi (dans le modèle):

public $validate = array(
     'password' => array(
      'minLength' => array(
       'rule' => array('minLength', '8') 
      ) 
     ) 
    ); 

Si vous voulez faire plus créer alors une validation custom validation method dans le modèle approprié. Dans le mot de passe de hachage de la méthode de validation personnalisée de cette façon: Si vous avez seulement un seul champ password dans votre formulaire Security::hash($this->data['User']['password'], null, true)

+0

Bien sûr, cela fonctionne, car il ** TOUJOURS ** sera puisque le mot de passe est haché avant la validation et le hachage est toujours plus de 8 caractères. Cela ne fait rien pour forcer le mot de passe non haché à 8 caractères ou plus. Essayez de tester votre formulaire avec un mot de passe à un chiffre - il sera validé. –

+0

En fait, je devais mentionner que j'ai le champ 'confirm_password' dans le même formulaire avec la même règle de validation. J'ai créé ce formulaire il y a si longtemps que j'ai oublié que je l'ai étiqueté «Mot de passe» dans les vues et le vrai champ «mot de passe» que j'ai intitulé «Confirmer le mot de passe». Ainsi, quand j'entre un caractère pour la validation de mot de passe échoue. – bancer