Bonsoir,
Je suis confronté a un problème qui me bloque depuis 2 heures.
J'ai suivi le tuto sur l'authentification, mais le soucis c'est que $this->Auth->login() me retourne sans cesse false.
J'ai remarquer que lorsque je soumet un identifiant et un password, dans la requete il ne check pas le password. il regarde seulement le username.

SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`role` FROM `users`.`users` AS `User` WHERE `User`.`username` = 'test' LIMIT 1

Quelqu'un à t-il deja rencontrer ce soucis ?

Je vous soumet mon code:

Login.ctp

<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->input('username',array('label'=>'Login')); ?>
<?php echo $this->Form->input('password',array('label'=>'Mot de pass')); ?>
<?php echo $this->Form->end('connect'); ?>

UsersController.php

class UsersController extends AppController {
    public function login() {
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                return $this->redirect($this->Auth->redirectUrl());
            } else {
                $this->Session->setFlash(__('Username ou password est incorrect'));
            }
        }
    }
}

AppController.php

class AppController extends Controller {
    public $components = array('Session','Auth');
    public $helpers = array('Session','Form','Html');
    public function beforeFilter(){
        $this->Auth->loginAction = array('action'=>'login','controller'=>'users','admin'=>false);
        if(!isset($this->request->params'prefix'])){
            $this->Auth->allow();
        }
    }
}

Je suis sur la derniere version 2.4.4.

Merci d'avance pour votre aide.

3 réponses


Lartak
Réponse acceptée

Bonjour.
Comment ça il ne regarde que le username ?
Si tu veux faire référence à la requête SQL, c'est tout à fait normal, il recherche par rapport à l'username pour construire la session, mais ça ne veut pas dire qu'il ne récupère pas le password dans la base de données.
S'il te renvoi false lors de l'identification, c'est que l'username ou que le password n'est pas identique entre ce qui est envoyé par le formulaire et le traitement fait suite à la récupération de la base de données.
Si tu es sur d'avoir entré le même mot de passe que lors de l'inscription, vérifies si tu as bien fait l'encodage du mot de passe lors de l'inscription.

volovitz
Réponse acceptée

Bonjour,

Quand tu as créé l'utilisateur via CakePHP, as-tu bien sauvegarder le password avec AuthComponent::password ?

Exemple :

$data = $this->request->data;
$data'User']'password'] = AuthComponent::password($data'User']'password']);
if ($this->User->save($data)) {
    $this->Session->setFlash('Inscription réussie');
}

Bonsoir,
Cela venais bien d'un problème lié à l'encodage.
Merci beaucoup pour vos retour :)