Bonjour tout le monde.

Cela fais assez longtemps que j'ai pas recodé et j'ai un problème avec le composent Auth...

Quand j'envoie le formulaire de connexion, je vois dans la requête qu'il prends bien le pseudo en tant que "username" mais il ne détecte pas le mot de passe même si je le met de type password.

Est ce que quelqu'un peut m'aider ?

UsersController.php

public function login(){
        if (!empty($this->request->data)) {
            if ($this->Auth->login()) {
                $this->Session->setFlash("Vous êtes maintenant connecté", "flash", array('class' => 'success', 'escape' => false));
            }else{
                $this->Session->setFlash("Vos identifiants sont éronnés", "flash", array('class' => 'danger', 'escape' => false));
            }
        }  
    }

Page login en simplifiée

<?php echo $this->Form->create('User', array('class' => 'form-horizontal')) ?>

              <?php echo $this->Form->input('username', array('label' => 'Nom de compte')) ?>

              <?php echo $this->Form->input('password', array('label' => 'Mot de passe')) ?>
      <?php echo $this->Form->end('Se connecter') ?>

Et la requête quand j'envoie le formulaire

SELECT `User`.`id`, `User`.`username`, `User`.`password` FROM `XXXX`.`users` AS `User` WHERE `User`.`username` = 'admin' LIMIT 1

11 réponses


Bonjour.
Est-ce que tu as bien précisé dans ton composant Auth que tu utilises le système par formulaire ?
Ce serait bien que tu montres ce que tu as mis exactement en déclarant ton composant Auth dans ton AppController.

Tchoupi
Auteur

Bien sûr que je l'ai déclaré ^^

public $components = array(
        'Session',
        'Cookie',
        'DebugKit.Toolbar',
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'scope' => array('User.Active' => 1)
                )
            )
        )
    );

Fait un debug dans ton fonction login :

public function login(){
        if (!empty($this->request->data)) {
            debug($this->request->data); exit;
            if ($this->Auth->login()) {
                $this->Session->setFlash("Vous êtes maintenant connecté", "flash", array('class' => 'success', 'escape' => false));
            }else{
                $this->Session->setFlash("Vos identifiants sont éronnés", "flash", array('class' => 'danger', 'escape' => false));
            }
        }  
    }

Si il y a bien le password c'est un problème avec Auth.
Si il y a pas le password c'est un problème avec ton formulaire.

Tchoupi
Auteur

J'ai installer debigkit, et il détecte bien le password et du coup idem avec le debug.

Je ne sais vraiment pas comment faire du tout là...

C'est bon dans le sql il demande bien le password :

SELECT `User`.`id`, `User`.`username`, `User`.`<strong>password</strong>` FROM `XXXX`.`users` AS `User` WHERE `User`.`username` = 'admin' LIMIT 1

Après c'est le composant Auth qui va checker le password, pas la requete SQL.

Donc ta juste à controller que tu ai bien l'user dans ta table et que le mot de passe soit correctement encodé.
Fonction : AuthComponent::password('ton-mot-de-passe');

Vérifies l’orthographe du champ dans la base, et vire çà si tu ne t'en sers pas :

'scope' => array('User.Active' => 1)

Surtout qu'il faut écrire

'scope' => array('User.active' => 1)

Il n'y a pas de majuscule au nom du champ.

Détail, php et SQL n'est pas case sensitive. Mais c'est bien de le faire pour être dans les bonnes conventions de cakePHP

Tchoupi
Auteur

User.active, je m'en sert toujours.
Pour Auth, j'ai le souvenir qu'avant je n'avais pas besoin de faire quoi que ce soit et cela marchait.

Je vais essayer avec ta méthode.

As-tu bien encodé ton password ? Quelle version de Cake utilises-tu ?

Tchoupi
Auteur

J'utilise la dernière version de Cake.

J'ai remarquer quant prenant une ancienne version de Cake, ça fonctionne bien, avec bien sûr le même code.

Du coup je pense que Cake a modifiée ça façon de faire.