Bonjour à tous,

Je suis en train de suivre le tutoriel de cakePHP "Développer un site avec CakePHP, Jour 4"

J'ai suivi à la lettre le tutoriel et lorsque la requête affiche le mot de passe hashé, chez moi, la requête est :

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

J'ai bien déclarer les components Session et Auth dans le AppController et mon problème se situe dans cette boucle

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","notification");
}
}
}

A chaque fois il passe dans le ELSE.

Si quelqu’un aurait des informations je suis preneur, j'utilise cakePhp 2.4.6.

4 réponses


ker0x
Réponse acceptée

Le retour de la requête est normal. La fonction login fait d'abord un find('first') sur le username uniquement et compare ensuite le mot de passe.

A mon avis tu n'as pas du bien encodé le mot de passe de ton utilisateur à l'enregistrement. Pense bien à faire cette action dans le beforeSave de ton model User :

App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel {
    public function beforeSave($options = array()) {
        if (!$this->id) {
            $passwordHasher = new SimplePasswordHasher();
            $this->data'User']'password'] = $passwordHasher->hash(
                $this->data'User']'password']
            );
        }
        return true;
    }
}

Une autre remarque même si ton problème ne vient pas de là mais la fonction $this->Auth->redirect() est dépréciée depuis la version 2.3 de Cake. Il faut utiliser $this->Auth->redirectUrl() à la place!

Romano83
Réponse acceptée

Salut !
J'ai eu le même problème quand j'ai suivi ce tuto.
Pour le résoudre, j'ai suivis le tuto sur le système de membres et j'ai créé un formulaire d'inscription pour pouvoir passer à la suite du tuto.
D'après ce que j'ai pu comprendre, il y a eu un changement au niveau du des dernières versions de cakePHP qui fait qu'on ne peux plus voir les mots de passe lors d'un debug ou autre. Donc impossible d'entrer un mot de passe à la volée comme on le voit dans le tuto ;)

payz
Auteur

Merci pour votre réponse

J'avais pourtant bien défini l'encodage du mot de passe dans le model User, J'ai aussi essayé avec votre parti de code, et je n'arrive toujours pas à obtenir le mot de passe en hashé dans mon sql_dump et donc à accéder à mon backoffice.

En fait, même en insérant un login/mdp directement dans la BDD, je n'arrive pas à me connecter à mon administration.

Edit : je rajoute le code au cas ou

function login(){
        if($this->request->is('post')){
            if($this->Auth->login()){
                return $this->redirectUrl('/admin/pages');
            }
            else{
                $this->Session->setFlash("Lol","notification");
            }
        }
    }

public $helpers =array('Text','Form','Html','Session');
    public $components = array('Session','Auth' => array(
                                                    'loginAction' => array('controller' => 'users', 'action' => 'login', 'admin' => false), 
                                                    'loginRedirect' => array('controller' => 'posts', 'action' => 'index', 'admin' => false),
                                                    'authenticate' => array('Form'),
                                                    'authorize' => array('Controller')
    ));
payz
Auteur

Merci à vous deux, j'ai résout mon problème.