7
votes

Validation de mot de passe CakePHP

Undefined index:  password [APP/models/airline.php, line 25]

5 commentaires

est $ ceci-> datadata destiné? Sinon, il y a votre problème.


J'ai corrigé le code ci-dessus pour supprimer les données supplémentaires toujours, je reçois l'erreur


Puis-je voir le formulaire HTML qui publie les données?


Avez-vous manqué un soulignement dans «Confirmer le mot de passe» dans votre fonction checkpassword?


STRCMP retourne 0 si les chaînes sont égales. 0 sera compris comme FALSE , afin que cela fera exactement le contraire de ce que vous attendez.


6 Réponses :


12
votes

Utilisez-vous l'AuthComponent? Sachez qu'il hachait tous les champs de mot de passe entrants (mais pas les champs de confirmation de mot de passe ", vérifiez avec débogage ($ ceci-> données) ), afin que les champs ne soient jamais identiques. Lire le manuel et utiliser authcomponent :: mot de passe à faire Le chèque.


ayant dit cela, voici quelque chose que j'utilise: xxx

C'est mauvais pour les raisons suivantes:

  • a couplage serré à la forme, attend toujours d'un champ mot de passe_control pour être présent. Vous devez utiliser le champ whitelisting ou désactiver la validation si vous n'en avez pas une dans vos données, c'est-à-dire: $ ceci-> User-> Enregistrer ($ this-> Données, TRUE, Array ("Field1", Field2 '))) .
  • a raccordé manuellement le mot de passe de la manière dont l'authentificateur fait (car il n'y a pas d'accès propre aux composants du modèle). Si vous modifiez l'algorithme utilisé dans l'AuthComponent, vous devez également la modifier ici.

    Cela dit, il valide et produit de manière transparente des messages d'erreur appropriés pour les champs de contrôle de mot de passe et de mot de passe sans nécessiter de code supplémentaire dans le contrôleur.


0 commentaires

5
votes

Voici l'erreur

if(strcmp($this->data['Airline']['password'],$this->data['Airline']['confirm_password']) ==0 )
{
    return true;
}
return false;


1 commentaires

Oh, la redondance horrible! Dans un cas comme celui-ci, vous êtes censé utiliser retour strcmp (...) == 0 .



0
votes

Cela aiderait-t-il: http : //sumanrs.wordpress.com/2011/10/01/cakephp-user-password-manager-authentication-Missing-Guide/ ? Cela devrait s'occuper de la validation du mot de passe.


0 commentaires

2
votes

pour les utilisateurs de CakePHP 2.x à l'aide de l'authentification, vous pouvez noter que "AuthComponent ne produit plus automatiquement chaque mot de passe qu'il peut trouver." C'est à dire. Les solutions ci-dessus peuvent ne pas être la bonne façon de résoudre le problème pour 2.x. http://book.cakephp.org/2.0 /en/core-libraires/comPonents/authentication.html#hagring-passwords


0 commentaires

1
votes

Heres est ma solution:

Vous devez faire une méthode nommée Match (vous pouvez la nommer ce que vous aimez): xxx

et la méthode de validation $ doit Soyez comme ceci: xxx

mot de passe2 est le champ pour comparer votre premier mot de passe mot de passe

Je suis content de le partager! : D


0 commentaires

3
votes

Pour valider le mot de passe, le mot de passe ancien et confirmer le mot de passe

class Adminpassword extends AppModel
{


    public $name          =  'Admin';
            public $primaryKey    =  'id';
            public $validate = array(
                'oldpassword' => array(
                        array(
                        'rule' => 'notEmpty',
                        'required' => true,
                        'message' => 'Please Enter Current password'
                        ),
                        array(
                        'rule' =>'checkcurrentpasswords',
                        'message' => 'Current Password does not match'
                        )
                ),
                'password' => array(
                        array(
                                'rule' => 'notEmpty',
                                'required' => true,
                                'message' => 'Please Enter password'
                        ),
                        array(                              
                         'rule' => array('minLength', 6),
                         'message' => 'Passwords must be at least 6 characters long.',
                        )
                ),
                'cpassword' => array(
                        array(
                        'rule' => 'notEmpty',
                        'required' => true,
                        'message' => 'Please Enter Confirm password'
                        ),
                        array(
                                'rule' => 'checkpasswords',
                                'required' => true,
                                'message' => 'Password & Confirm Password must be match.'
                        )
                )
            );

   function checkpasswords()     // to check pasword and confirm password
    {  
        if(strcmp($this->data['Adminpassword']['password'],$this->data['Adminpassword']['cpassword']) == 0 ) 
        {
            return true;
        }
        return false;
    }
    function checkcurrentpasswords()   // to check current password 
    {
        $this->id = $this->data['Adminpassword']['id'];
        $user_data = $this->field('password');       
        //print_r(Security::hash($this->data['Adminpassword']['oldpassword'], 'sha1', true));
        if ($user_data == (Security::hash($this->data['Adminpassword']['oldpassword'], 'sha1', true)))
        { 
             return true;
        }
        else
        {
         return false;
        }
    } 

}


0 commentaires