Salut je vient ici car je rencontre un probleme avec mon entity de user
J'ai mon fichier UsersController :

<?php
namespace App\Controller\Admin;

use Cake\Event\Event;

class UsersController extends AppController{

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

    public function add() {
        $user = $this->Users->newEntity();
        if ($this->request->is('post')) {
            $user = $this->Users->patchEntity($user, $this->request->data);
            if ($this->Users->save($user)) {
                $this->Flash->success('Vous ete inscrit');
                return $this->redirect(['controller' => 'Galleries', 'action' => 'index']);
            }
            $this->Flash->error('Impossible de vous inscrire');
        }
        $this->set(compact('user'));
    }

    public function login() {
        $user = $this->Users->newEntity();
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Flash->error('Impossible de vous connecter');
        }
        $this->set(compact('user'));
    }

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

}

et mon fichier User :

<?php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{

    // Rend les champs assignables en masse sauf pour le champ clé primaire "id".
    protected $_accessible = [
        '*' => true,
        'id' => false
    ];

    // ...

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

    // ...
}

mais le probleme c'est quand quand je creer des nouvelle utilisateur il m'utilise l'entity de base et pas celle de user donc le mot de passe n'est pas haché c'est la premiere fois que j'ai un proble avec les entity et je ne voit pas d'ou ca peut venir.

3 réponses


Aerue
Réponse acceptée

Salut il faut absolument que tu créer la Table correspondante à l'entity Users, qui se chargera de charger son entity si elle existe, sinon cela chargera l'entity par défaut

<?php
namespace App\Model\Table;

use Cake\ORM\Table;

class UsersTable extends Table {
}
?>

Bonsoir.
Pourrais-tu expliquer pourquoi ton système d'inscription d'utilisateur se situe dans le prefix Admin ?
L'inscription et la connexion sont censé être dans un espace public et non restreint.
Y a t'il bien le mot de passe qui est soumis ?
Tes règles de validations sont-elles bien présentes ?
Ton composant Auth est-il bien configuré ?

Il se situe dans le prefix admin car enfete je n'est pas besoin d'identification dans tout les reste de mon application sauf dans la partie administation.
pour la configuration du composant Auth j'ai mit dans me AppController qui se situe dans prefix admin :

<?php
namespace App\Controller\Admin;

use App\Controller\AppController as Controller;
use Cake\Event\Event;

class AppController extends Controller{

    public $helpers = ['AkkaCKEditor.CKEditor' => [
        'version' => '4.5.3',
    ]];

    public function initialize() {
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authorize' => ['Controller'],
            'loginRedirect' => [
                'controller' => 'Galleries',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Presses',
                'action' => 'index'
            ],
            'loginAction' => [
                'controller' => 'Users',
                'action' => 'login'
            ]
        ]);
    }

    public function beforeRender(Event $event) {
        parent::beforeRender($event);
        $this->viewBuilder()->layout('admin');
    }

}

Je n'est pour le moment pas mit de regle de validation et en ce qui concernent le mot de passe oui il est bien soumit mais quand je fait un debug de la variable user qui conteient le newEntity aulieu d'avoir Entity User j'ai l'Entity de base de cakephp