Salut
Dans ma section membre il y a un petit bug avec le changement du mot de passe. Une fois qui fait la sauvegarde du nouveau mot de passe et que l'utilisateur se déconnecte. Quand il veux se reconnecter avec son nouveau mot de passe il est refuse de reconnaitre le nouveau mot de passe que l'utilisateur avais entré au paravent.

voici la function edit():

public function edit(){
        $user_id = $this->Auth->user('id');
        if(!$user_id){
            $this->Session->setFlash("Vous n'est pa autorrisé à cette page. Veillez vos connextez pour avoir accès à cette page",'notif',array('type'=>'alert'));
            $this->redirect('login');
        }
        $this->User->id = $user_id; 
        $passError = false; 
        if($this->request->is('put') || $this->request->is('post')){
            $d = $this->request->data; 
            $d'User']'id'] = $user_id; 
            if(!empty($d'User']'pass1'])){
                if($d'User']'pass1']==$d'User']'pass2']){
                    $d'User']'password'] = Security::hash($d'User']'pass1'],null,true); 
                }else{
                    $passError = true;  
                }
            }
            if($this->User->save($d,true,array('username','firstname','lastname','password','avatar','bio','website','city','birthday','country','twitter','facebook','mail','backgroundcolor','coutry','year','music','statut','slogan','media_id'))){
                $this->Session->setFlash("Votre profil a bien été édité","notif");
            }else{
                $this->Session->setFlash("Impossible de sauvegarder","notif",array('type'=>'error'));
            }
            if($passError) $this->User->validationErrors'pass2'] = array('Les mots de passe ne correspondent pas');
        }else{
            $this->request->data = $this->User->read();
        }
        $this->request->data'User']'pass1'] = $this->request->data'User']'pass2'] = '';
         $user = $this->User->find('first',array(
            'conditions' => array('active'=>1,'id'=>$user_id),
            'fields' => array('active','id','username')
        ));
        $d'User'] = $user;
        $this->set($d);
    }

et ma vue edit.ctp

<?php echo $this->Form->input('pass1',array('label'=>"Mot de passe",'type'=>'password')); ?>
<?php echo $this->Form->input('pass2',array('label'=>"Confirmer le mot de passe",'type'=>'password')); ?>

Merci de votre aide en avance! :P

5 réponses


giizmo
Réponse acceptée

j ai le meme probleme apparament le hachage ne correspont pas comme dans le tuto cakephp en 4 jours ^^ cela fonctionne si je met cela $d = $this->request->data; (je v l entourer avec des ** :):

function edit(){
        $user_id = $this->Auth->user('id');
        if(!$user_id){
            $this->redirect('/');
            die();
        }
        $this->User->id = $user_id;
        $passError = false;
        if($this->request->is('put') || $this->request->is('post')){
            $d = $this->request->data;
            $d'User']'id'] = $user_id;
            if(!empty($d'User']'password'])){
                if($d'User']'password'] == $d'User']'passwordconfirm']){
                    $d'User']'password'] = Security::hash($d'User']'password'],null,true); 
                }else{
                    $passError = true;  
                }
            }
            **$d = $this->request->data;**
            if($this->User->save($d,true,array('firstname','lastname','password'))){
                $this->Session->setFlash("Votre profil a bien été édité","notif");
            }else{
                $this->Session->setFlash("Impossible de sauvegarder","notif",array('type'=>'error'));
            }
            if($passError) $this->User->validationErrors'passwordconfirm'] = array('Les mots de passe ne correspondent pas');
        }else{
            $this->request->data = $this->User->read(); 
        }
        $this->request->data'User']'password'] = $this->request->data'User']'passwordconfirm'] = ''; 
    }
lakamark
Auteur

Merci,Je vais essayer ton idée.

Vérifier dans dans le model User, vous devez avoir un beforeSave qui cripte le mot de passe avant l'enregistrement, donc inutile de le refaire au niveau controller.

Si c'est le cas vous cryptez deux fois le mot de passe,

lakamark
Auteur

@philieric : Pourquoi que avec un beforeSave qui cript le mot de passe, si mon mot de passe est déjà cripté?

je dis cela car quand on regarde les sources du tuto de grafikart sur la formation développer avec cakephp en 4 jour, il en est fait référence dans cette discussion il crypte le mot de passe au niveau du model User dans le beforeSave.