Bonjour,

Je tente de mettre en place un système d'authentification avec CakePhp en 2.5 en suivant le tutoriel ( Tp : gestion des utilisateur), seulement, lors de la connexion, la fonction login me retourne toujours faux, voila le code mis en place : <br />
UsersController :


    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('signup','login','logout');
    }

        public function login() {
        if (!empty($this->request->data)) {
            if ($this->Auth->login()) {
                $this->Session->setFlash("connecter");
            } else {
                $this->Session->setFlash("Nom d'user ou mot de passe invalide, réessayer");
            }
        }
    }

        public function signup() {
        if(!empty($this->request->data)) {
            $this->User->create($this->request->data);
            if($this->User->validates()) {
                $this->User->create(array(
                    'username' => $this->request->data['User']['username'],
                    'firstname' => $this->request->data['User']['firstname'],
                    'password' => $this->Auth->password($this->request->data['User']['password']),
                    'email' => $this->request->data['User']['email']
                    )
                );
                $this->User->save();
                App::uses('CakeEmail','Network/Email');
                $cakeEmail = new CakeEmail('default');
                $cakeEmail->to($this->request->data['User']['email']);
                $cakeEmail->subject('Votre inscription');
                $cakeEmail->viewVars($this->request->data['User']);
                $cakeEmail->emailFormat('text');
                $cakeEmail->template('signup');
                $cakeEmail->send();
                $this->Session->Setflash('Inscrit');
            }
            else {
                $this->Session->Setflash('Pas inscrit');
            }
        }
    }

Le modele User :

  public $validate = array(
        'username' => array(
            'rule' => '/^[a-zA-Z]*$/',
            'message' => 'Votre nom n\'est pas valide'
        ),
        'firstname' => array(
            'rule' => '/^[a-zA-Z]*$/',
            'message' => 'Prénom obligatoire'
        ),
        'email' => array(
            'alpha' => array(
                'rule' => 'email',
                'message' => 'Email invalide'
            ),
            'uniq' => array(
                'rule' => 'isunique',
                'message' => ' Adresse email déjà utilisé'
            )

        ),
        'password' => array(
            'rule' => 'notEmpty'
        ),
        'password2' => array(
            'rule' => "identicalFields",
            'message' => 'Les deux mot de passes sont différents'
        )
    );

    public function identicalFields($check,$limit) {
       return $check['password2'] == $this->data['User']['password'];
    }
}

Quand je fais :

debug($this->request->data['User']['password']);

J'ai comme réponse :
9c814418d6469029b61caf2736c300b1ed8803d1

alors que dans la base de données c'est :
9c814418d6469029b61c
Pour le mot de passe 1111

La requête affiché en bas de page c'est :

SELECT `User`.`id`, `User`.`username`, `User`.`firstname`, `User`.`email`, `User`.`password` FROM `projet_ig`.`users` AS `User` WHERE `User`.`username` = 'duran' LIMIT 1

Je ne sais pas pourquoi, mais il ne cherche pas comparer les mot de passe. Dans la table users, j'ai bien un champ username et password. Je précise que je n'ai pas modifié la sécurity.salt entre l'enregistrement des données et le test de connexion.

Merci d'avance.

3 réponses


freezlike
Réponse acceptée

Bonsoir,

Vérifie la longueur de ton varchar en base de données que t'a créer ça me vient à l'idée toute de suite après avoir vu l'overview de ton save bdd

Cordialement.

M
Auteur

Bonsoir,

Effectivement, la longueur était de 20 seulement...
Tout fonctionne.
Merci pour l'aide.

PS : Faut-il éditer pour mettr résolu ?

Re Bonsoir,

Heureux de t'avoir aider oui met cela en résolu s'il te plaît.

Bonne soirée.