Salut !

J'ai un soucis avec la partie authentif. J'arrive pas à me connecter pourtant ma requete est bien renseignée.

mon controller users : ```

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

    if ($this->request->is('post')) {
        $user = $this->Auth->identify();

        if ($user) {
            $this->Auth->setUser($user);
            //return $this->redirect(['controller' => 'Pages','action' => 'display']);
        }

        $this->Flash->error(__("Pseudo ou mot de passe incorrecte"));
    }

}
J4ai du mal à vori pourquoi ca ne passe pas 
 JE me dis que ca peut etre du coté de l'ajout d'un user car je hache d'une maniere etrange mais ca passe quand meme normalement !

public function add(){

    $user = $this->Users->newEntity();
    if($this->request->is('post')){
        $user = $this->Users->patchEntity($user,$this->request->data);

        $user->creation = date("m.d.y");
        //hashage du mot de passe
        $hasher = new DefaultPasswordHasher();
        $user->password =  $hasher->hash($this->request->data('password')); 
        if ($this->Users->save($user)) {
            $this->Flash->success(__('Profil enregistre !'));
            return $this->redirect(['action'=>'index']);
        }
        $this->Flash->error(__('Impossible d enregistrer le profil'));

    }
    $this->set('user',$user);
}


Au niveau de mon champs password en bdd il est de type varchar(255) . Help me please !

Bonne soirée =) 

7 réponses


Xeta
Réponse acceptée

C'est moi ou tu as mis le code de la fonction beforeFilter dans la fonction login ?
Post ton code sur http://codeshare.io/ ou https://gist.github.com pour être sur, car le parser de Graf a un bug.

Tu as bien crypté le mot de passe de tes utilisateurs ?

oui mon mot de passe est bien crypte je le vois bien en bdd.
Dans ma fonction add juste avant l'enregistrement de luser je crypt le mot de passe```
//hashage du mot de passe
$hasher = new DefaultPasswordHasher();
$user->password = $hasher->hash($this->request->data('password'));

Peux tu nous montrer dans ton AppController le chargement du component Auth ?
Quel sont les noms des champs en bdd du username et du password ?

Pour que l'authentification passe il faut que :

  • tu aies le composant auth qui soit chargé
  • Que tes champs en base de données soient appelés username et password (à moins que tu le modifies dans l'appel à Auth)
  • Que tes mots de passe soient cryptés (on le fait souvent dans le modèle au niveau de _setPassword et pas dans le controller directement)

oui je l'ai bien fait comme dans le tuto. MEs champs nommé coresspodnent à ceux de la bdd. c'est à dire username et password.

Voici un bout de mon code de mon AppController.php :

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

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth',[
                'authorize' => ['Controller'],
                'loginRedirect' => [
                        'controller' => 'Depenses',
                        'action' => 'index'
                ],
                'logoutRedirect' => [
                        'controller' => 'Users',
                        'action' => 'login'
                ]]
                );

    }

pardon javais mal copie la fonction netais pas dans la fonction login ^^