Bonjour à tous,

Je suis le tutoriel cakephp jour 4 et je viens de créer ma table users.
J'ai ajouté une ligne manuellement depuis phphmyadmin: username : admin et psswd : admin.
Mais une fois que je veux les entrer en login, erreur : username ou psswd incorrect.

Ca a avoir avec le code crypté ? Si oui, comment afficher les query sql en bas de la page de login ?
Je ne suis pas encore habitué, tellement il y a de dossiers et de fichiers. Ou placer la ligne de code sql_dump pour l'afficher sous l'écran de login ?

Vous pourriez m'aider ?

Merci d'avance pour votre temps

21 réponses


Mikachu
Réponse acceptée

fais un debug de $this->Auth->password('admin') et vois si il te crash la meme chose que dans ta base.

exemple:

public function login() {
    debug($this->Auth->password('admin')); die();
    // ton code ....
}

Bonsoir.
Oui, le composant Auth attend un password encrypté.
Je te conseille de faire l'insertion manuelle via une requête depuis CakePHP, par exemple:

$this->User->save(array('username' => 'admin', 'psswd' => $this->Auth->password('admin')));

Bonsoir Lartak11,

en ajoutant ta ligne, j'ai :

Fatal error: Call to a member function save() on a non-object in

Une idée?

Tu es bien dans le controller Users (UsersController) ?

Non, fais juste une petite fonction pour éviter les risques, du genre :

public function test(){
        $this->User->save(array('username' => 'admin', 'psswd' => $this->Auth->password('admin')));
        $this->Session->setFlash('L\'utilisateur '.$this->request->data'User']'username'].' a bien été ajouté');
        return $this->redirect($this->referer());
    }

Et dans ta vue tu crées un lien pour activer la fonction :

<?php echo $this->Html->link('Ajouter l\'utilisateur admin', array('controller' => 'users', 'action' => 'test')); ?>

Par contre penses à supprimer ton ancien enregistrement avant. Ne fais pas une vue exprès pour la fonction, mets le lien dans ta vue login par exemple.

Voilà, l'insertion se fait mais rien ne change :/
Dans la table le password est bien crypté mais que je tape le password " admin " ou sa version cryptée, j'ai toujours le message d'erreur " login ou mot de passe ne correspond pas "

Tu as quoi dans ta fonction login ?
Juste pour être sur, tu as bien défini que tu utilises pour le mot de passe un champ psswd au lieu de password dans le composant Auth ?

J'y ai glissé ta ligne pour créer l'entrée en bd puis je l'ai retiré :

function login(){

if($this->request->is('post'))
{
return $this->redirect($this->Auth->redirect());
}else
{
$this->Session->setFlash("Votre login ou votre mot de passe ne correspond pas","notif",array('type'=>'error'));
}

}

test ca: en fait tu as oublié la verif si login avec auth

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash("Votre login ou votre mot de passe ne correspond pas","notif",array('type'=>'error'));
        }
    }
}

Mets plutôt ceci :

public function login(){
        if(!$this->Auth->loggedIn()){
            if($this->request->is('post')){
                if($this->Auth->login()){
                    $this->Session->setFlash("Vous êtes à présent connecté","notif",array('type'=>'success'));
                    return $this->redirect($this->Auth->redirect());
                } else {
                    $this->Session->setFlash("Votre login ou votre mot de passe ne correspond pas","notif",array('type'=>'error'));
                }
            }            
        }
        return $this->redirect('/');
    }

Ou ce que t'as donné mikachu. :)

Ca ne change rien :/ User et MdP toujours incorrects

attention: le password est sensible a la casse (les majusules). dans le doute, es tu sure de pas avoir mis de majuscule?

Et pour ça ?

Juste pour être sur, tu as bien défini que tu utilises pour le mot de passe un champ psswd au lieu de password dans le composant Auth ?

+1 Lartak11

Ou puis-je configurer ce composant Auth ?
En tout cas j'ai toujours écrit password, je n'ai utilisé "psswd" qu'ici sur le forum.

Je peux essayer? :o

J'ai sûrement faux mébon !

Dans ton AppController

public $components = array('Session', 'Auth' => array('password' => 'psswd');

Alors? :D

EDIT: ce poste est lui aussi inutile :(

mais pourquoi transformer password en psswd ? :(

C'est toi qui dit

username : admin et psswd : admin

Si tu veux de l'aide pour du développement web, évites d'utiliser des abréviations sur ce genre d'information, si ton champ en base de données se nomme password, ne nous dit pas autre chose et ne changes rien.

Désolé si je vous ai embrouillé avec ça, j'ai retenu la leçon ...

Mikachu, grâce à ton debug, il m'a affiché un mot de passe crypté mais rien à voir avec celui qui est dans ma bd.
Le truc c'est que si je me logg avec " admin " et en mot de passe, le code crypté du debug, ça me connecte !

Rien compris ^^

alors copie colle le password crypter generer par le debug dans ta base a la place de celui actuelle et tente une connexion.

c est pour cela que tu ne peux pas de logguer le password n est pas le meme donc erreur

Ca fonctionne ! Merci guys