Bonjour à tous,

Je suis en train de mettre en place un systeme d'authentification avec CakePHP et depuis 2j je me tire les cheveux.

J'ai un username qui correspond a l'email de l'utilisateur et un password chiffré dans le model User :

public function beforeSave($options = array()) {
        if (!empty($this->data[$this->alias]['password'])) {
            $passwordHasher = new SimplePasswordHasher();
            $this->data[$this->alias]['password'] = $passwordHasher->hash($this->data[$this->alias]['password']);
        }
            return true;
        }

Et dans mon appController j'ai :

public $components = array(
        'Session',
        'Auth' => array(        
            'loginAction' => array(
                'controller' => 'profils',
                'action' => 'signin',
                'manager' => true
            ),
            'authError' => 'Pensiez-vous réellement que vous étiez autorisés à voir cela ?',
            'authenticate' => array(
                'Form' => array(
                    'passwordHasher' => 'Simple',
                    'fields' => array(
                        'email' => 'username', // 'username' par défaut
                        'password' => 'password'  // 'password' par défaut
                    )
                )
            ),
            'loginRedirect' => array('controller' => 'defaults', 'action' => 'index', 'manager' => true),
            'logoutRedirect' => array('controller' => 'profils', 'action' => 'signin', 'manager' => true),
            'authorize' => array('Controller') // Ajout de cette ligne
        )
    );

Avec un simple $this->Auth->login() je devrais me connecter... eh ben non XD

Pourtant mon formulaire n'envois que le champ email et password...

Je suis en 2.4.6 (oui je sais j'aime bien cette version). Au secours...

Merci beaucoup d'avance

Wheezy

3 réponses


Lartak
Réponse acceptée

Bonjour.
Tu te trompes, ce n'est pas :

'email' => 'username'

Mais :

'username' => 'email'
Wheezy
Auteur

Bonjour (Re ^^),

J'ai essayé de mettre des petits Debug() dans le AuthComponent().
Je pense que c'est un probléme de recherche en base. J'ai comme l'impression qu'il ne retrouve pas mon User. Ou alors que le "hash" du password ne correspond avec ce qu'il trouve...

Du coup j'ai ajouter dans mon AppController

public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'passwordHasher' => array(
                    'className' => 'Simple',
                    'hashType' => 'sha256'
                )
            )
        )
    )
);

Et dans le beforeSave j'ai modifier le type de Hash :

$passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256'));

Je me suis dis je force un type de Hash ca devrait être bon... mais non. Il ne veut pas me connecter.

Comment puis-je débugger cette partie pour savoir ce qui cloche?

Merci à vous,

Wheezy

Wheezy
Auteur

Hey ^^

C'est bon j'ai trouvé.
Le formulaire (du moins les éléments) tu doit respecté une convention.

name="data['dfdffd']['sdfsdfsdf']" et pas name="username"

Résolu ;)

Wheezy