Bonjour,

J'essaye d'etablir une authetification à partir de mon controller users sous cake mais ma variable de login $user est tout le temps egale a false

Voici ce que j'ai fais

dans le 'usersController'

 public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);
        $this->Auth->allow(['add', 'logout']);
    }

    public function login()
    {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            debug($this->Auth->identify());
            die();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Flash->error(__('Invalid username or password, try again'));
        }
    }

    public function logout()
    {
        return $this->redirect($this->Auth->logout());
    }

Dans le AppController

 public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authorize' => ['Controller'],
            'Form' => ['fields' => [
                'username' => 'username', 
                'password' => 'motDePasse']
            ],
            'loginRedirect' => [
                'controller' => 'Articles',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Users',
                'action' => 'login',
                'home'
            ],
            'loginAction' => [
                'controller' => 'Users',
                'action' => 'login'
            ]        
        ]);
    }

    /**
     * Before render callback.
     *
     * @param \Cake\Event\Event $event The beforeRender event.
     * @return void
     */
    public function beforeRender(Event $event)
    {
        if (!array_key_exists('_serialize', $this->viewVars) &&
            in_array($this->response->type(), ['application/json', 'application/xml'])
        ) {
            $this->set('_serialize', true);
        }
    }

    public function beforeFilter(Event $event)
    {
        $this->Auth->config('authenticate', ['Form']);
        $this->Auth->allow(['index', 'view', 'edit']);
    }

Dans user.php

protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }

Et dans le login.ctp

<div class="users form">
<?= $this->Flash->render('auth') ?>
<?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __("Connectez vous?!") ?></legend>
        <?= $this->Form->input('login', ['name' => 'login']) ?>
        <?= $this->Form->input('motDePasse', ['type' => 'password' , 'name' => 'password' ]) ?>
    </fieldset>
<?= $this->Form->button(__('Se Connecter')); ?>
<?= $this->Form->end() ?>
</div>

Merci d'avance pout vos reponses :)

8 réponses


Azorgh
Réponse acceptée

Trouve la classe Auth qui contient la méthode identify() (si tu as une IDE digne de ce nom, un CTRL + click fera l'affaire), et fais tes debug dedans. Regarde les valeurs qu'il test.

Hello,

As tu des données dans ta table users ?
Si oui, le mot de passe est-il correctement crypté ?

Oui j'ai des données et pour le mot de passe qui est en MD5 j'ai mis la longueur à 300 dans la base pour etre sur

Es tu sur que le cryptage mot de passe de CakePHP est en MD5 ?

Il me semble que c'est ça par defaut, mais je pense pas que ça soit qui pose un probleme a l'authentification

Et bien si, si le cryptage n'est pas bon, le mot de passe que tu as rentré ne correspondra pas à celui que tu a en base de donnée, donc l'auth va failed et $user = false !

Est ce que tu sais comment je pourrais voir si ma requete de log va bien voir dans la BD? Car pour le mot de passe j'utilise le DefaultPasswordHasher des deux cotés

J'ai trouvé le problème, en fait j'avais nommé mes champs comme ça "login" "motdePasse" et du coup il ne les trouvait pas dans la BD. J'ai donc renommé en "username" et "password" puis avec composer via l'invite de commande "cake bake controller Users" et c'etait bon. Merci de ton aide