Bonjour à tous,

j'ai une erreur assez bizzare, toute mon authentification fonctionnait, et d'un coup l'authentification ne fonctionne plus.

J'ai pas changé la table users, j'ai pas changé son modèle et ni son controller.

J'ai essayé de remplacer tout mon code par un des example du site cakePHP et même problème !

J'ai une requete qui se fait mais la comparaison du mot de passe n'apparaît pas dans la requete. A l'inverse du tutoriel vidéo de Grafikart. Est ce que c'est une sécurité de ne pas l'afficher ?

Et au final ma requete login() renvoie toujours false.

voici mon model user:

<?php

// app/Model/User.php
App::uses('AppModel', 'Model');
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');

/**
* Modèle user
*/
class user extends AppModel
{

    public $hasAndBelongsToMany = array('skill');

    public function beforeSave($options = array()) {
        if (isset($this->data[$this->alias]['password'])) {
            $passwordHasher = new SimplePasswordHasher();
            $this->data[$this->alias]['password'] = $passwordHasher->hash(
                $this->data[$this->alias]['password']
            );
        }
        return true;
    }

    public $validate = array(
        'username' => array(
            'required' => array(
                'rule' => 'notBlank',
                'message' => 'Un nom d\'utilisateur est requis'
            )
        ),
        'password' => array(
            'required' => array(
                'rule' => 'notBlank',
                'message' => 'Un mot de passe est requis'
            )
        )
    );

}

mon controller Users (la partie add c'est un essai pour voir si l'accès à la base de données est toujours correct et c'est le cas).

<?php
/**
* Users Controller
*/
class UsersController extends AppController
{

    public function beforeFilter() {

        parent::beforeFilter();

        // Permet aux utilisateurs de s'enregistrer et de se déconnecter
        $this->Auth->allow('add','login', 'logout');

    }
    //$this->layout = 'logup';

    public function add() {
        if ($this->request->is('post')) {
            $this->User->create();
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash(__('L\'user a été sauvegardé'));
                return $this->redirect(array('action' => 'login'));
            } else {
                $this->Session->setFlash(__('L\'user n\'a pas été sauvegardé. Merci de réessayer.'));
            }
        }
    }

    public function login() {

        if ($this->request->is('post')) {

            if ($this->Auth->login()) 
            {
                return $this->redirect($this->Auth->redirectUrl());
            } 
            else 
            {
                $this->Session->setFlash(__("Nom d'user ou mot de passe invalide, réessayer"));
            }
        }
    }

    public function logout(){

        $this->Auth->logout();

        return $this->redirect('/');

    }

}

Et ma vue

<div class="users form">
<?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('User'); ?>
    <fieldset>
        <legend>
            <?php echo __('Please enter your username and password'); ?>
        </legend>
        <?php echo $this->Form->input('username');
        echo $this->Form->input('password');
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Login')); ?>
</div>

Si quelqu'un a une idée c'est super parce que la j'ai l'impression d'avoir tout essayé ! :(

La seule chose que j'ai ajouté ce sont des associations mais qui n'ont pas de rapport avec l'authentification ?

Au cas ou, voici la partie auth de mon AppController

public $components = array( 'Session',
                                'Cookie', 
                                'Auth'  => array(
                                            'authenticate'  => array(
                                                                'Form'  =>  array(
                                                                            'scope' =>  array('user.active' => true)
                                                                            )
                                                                    ),
                                            'authorize'     =>  array('Controller'),
                                            'loginRedirect' => array('controller' => 'accueil', 'action' => 'index'),
                                            'logoutRedirect' => array('controller' => 'users', 'action' => 'login')
                                                )
                                );

En vous remerciant d'avance :)

bryan

3 réponses


bryou16
Auteur
Réponse acceptée

Résolu !

J'utilisais $this->Auth->user(['id']) dans mon AppController sans vérifier si il existait. Du coup pas d'erreur visible mais cette authentification foireuse.

Re :)

Je n'ai pas trop le temps de regarder, mais j'ai juste remarqué que ta déclaration du modèle User, ne portait pas de majuscule en première lettre. Est-ce que si tu change class user par class User ça change quelque chose ?

Juste un idée comme ça, au cas où lol.

Bon week-end, je reviens lundi au pire.

bryou16
Auteur

Ca ne change rien, je l'ai remis en majuscule du coup. Mais le resultat est le même.