Connexion impossible

Par AswadSaadi, il y a 10 ans


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, il y a 10 ans

Hello,

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

AswadSaadi, il y a 10 ans

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

Azorgh, il y a 10 ans

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

AswadSaadi, il y a 10 ans

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

Azorgh, il y a 10 ans

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 !

AswadSaadi, il y a 10 ans

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

Azorgh, il y a 10 ans

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.

AswadSaadi, il y a 10 ans

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