Bonjour tout le monde.
Cela fais assez longtemps que j'ai pas recodé et j'ai un problème avec le composent Auth...
Quand j'envoie le formulaire de connexion, je vois dans la requête qu'il prends bien le pseudo en tant que "username" mais il ne détecte pas le mot de passe même si je le met de type password.
Est ce que quelqu'un peut m'aider ?
UsersController.php
public function login(){
if (!empty($this->request->data)) {
if ($this->Auth->login()) {
$this->Session->setFlash("Vous êtes maintenant connecté", "flash", array('class' => 'success', 'escape' => false));
}else{
$this->Session->setFlash("Vos identifiants sont éronnés", "flash", array('class' => 'danger', 'escape' => false));
}
}
}
Page login en simplifiée
<?php echo $this->Form->create('User', array('class' => 'form-horizontal')) ?>
<?php echo $this->Form->input('username', array('label' => 'Nom de compte')) ?>
<?php echo $this->Form->input('password', array('label' => 'Mot de passe')) ?>
<?php echo $this->Form->end('Se connecter') ?>
Et la requête quand j'envoie le formulaire
SELECT `User`.`id`, `User`.`username`, `User`.`password` FROM `XXXX`.`users` AS `User` WHERE `User`.`username` = 'admin' LIMIT 1
Bonjour.
Est-ce que tu as bien précisé dans ton composant Auth que tu utilises le système par formulaire ?
Ce serait bien que tu montres ce que tu as mis exactement en déclarant ton composant Auth dans ton AppController.
Bien sûr que je l'ai déclaré ^^
public $components = array(
'Session',
'Cookie',
'DebugKit.Toolbar',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'scope' => array('User.Active' => 1)
)
)
)
);
Fait un debug dans ton fonction login :
public function login(){
if (!empty($this->request->data)) {
debug($this->request->data); exit;
if ($this->Auth->login()) {
$this->Session->setFlash("Vous êtes maintenant connecté", "flash", array('class' => 'success', 'escape' => false));
}else{
$this->Session->setFlash("Vos identifiants sont éronnés", "flash", array('class' => 'danger', 'escape' => false));
}
}
}
Si il y a bien le password c'est un problème avec Auth.
Si il y a pas le password c'est un problème avec ton formulaire.
J'ai installer debigkit, et il détecte bien le password et du coup idem avec le debug.
Je ne sais vraiment pas comment faire du tout là...
C'est bon dans le sql il demande bien le password :
SELECT `User`.`id`, `User`.`username`, `User`.`<strong>password</strong>` FROM `XXXX`.`users` AS `User` WHERE `User`.`username` = 'admin' LIMIT 1
Après c'est le composant Auth qui va checker le password, pas la requete SQL.
Donc ta juste à controller que tu ai bien l'user dans ta table et que le mot de passe soit correctement encodé.
Fonction : AuthComponent::password('ton-mot-de-passe');
Vérifies l’orthographe du champ dans la base, et vire çà si tu ne t'en sers pas :
'scope' => array('User.Active' => 1)
Surtout qu'il faut écrire
'scope' => array('User.active' => 1)
Il n'y a pas de majuscule au nom du champ.
Détail, php et SQL n'est pas case sensitive. Mais c'est bien de le faire pour être dans les bonnes conventions de cakePHP
User.active, je m'en sert toujours.
Pour Auth, j'ai le souvenir qu'avant je n'avais pas besoin de faire quoi que ce soit et cela marchait.
Je vais essayer avec ta méthode.
J'utilise la dernière version de Cake.
J'ai remarquer quant prenant une ancienne version de Cake, ça fonctionne bien, avec bien sûr le même code.
Du coup je pense que Cake a modifiée ça façon de faire.