Bonjour,
je suis débutant sur CakePhp, et pas moyen de connecter avec login(), j'ai tester avec le tuto disponible sur grafikart et aussi avec la doc de Cakephp,
J'utilise la version 2.9 de cake php

Voila mon code

AppController.php

App::uses('Controller', 'Controller');

class AppController extends Controller {
    public $components = array(
        'Flash',
        'Auth' => array(
            'loginRedirect' => array('controller' => 'Client', 'action' => 'index'),
            'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home')
            )
        );

    public function beforeFilter(){
        $this->Auth->allow('index', 'view');
    }
}

UsersController.php

<?php 
class UsersController extends AppController{

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

    public function index(){
        $this->User->recursive = 0;
        $this->set('users', $this->paginate());
    }

    public function view($id = null){
        if (!$this->User->exists($id)){
            throw new NotFoundException(__('Utilisateur invalide'));
        }
        $this->set('user', $this->User->findById($id));
    }

    public function add(){
        if ($this->request->is('post')) {
            $this->User->create();
            if ($this->User->save($this->request->data)) {
                $this->Flash->success(__('l\'user a été sauvegardé'));
                return $this->redirect(array('action' => 'index'));
            } else{
                $this->Flash->error(__('l\'user n\'a pas été sauvegarder. merci de bien vouloir réessayer.'));
            }
        }
    }

    public function delete($id = null){
        $this->request->allowMethod('post');

        $this->User->id = $id;
        if (!$this->user->exists()) {
            throw new NotFoundException(__('Utilisateur invalide'));
        }
        if ($this->User->delete()){
            $this->Flash->success(__('Utilisateur supprimé'));
            return $this->redirect(array('action' => 'index'));
        }
    }

    public function login(){
        if($this->request->is('post')){
            if($this->Auth->login()){
                return $this->redirect($this->Auth->redirectUrl());
            }else{
                $this->Flash->error(__("Nom ou mot de passe invalide"));
            }
        }
    }

    public function logout(){
        return $this->redirect($this->Auth->logout());
    }

}
 ?>

Model/User.php

<?php 
    App::uses('AppModel', 'Model');
    App::uses('SimplePasswordHasher', 'Controller/Component/Auth');

    class User extends AppModel {
        public $name = 'User';
        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')
                )
            );

        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;
        }

    }
 ?>

login.ctp

<div class="users from">
    <?php echo $this->Flash->render('auth'); ?>
    <?php echo $this->form->create('User'); ?>
    <fieldset>
        <legend><?php echo __('Veuillez entré votre identifiant et mot de passe'); ?></legend>
        <?php echo $this->Form->input('username');
                echo $this->Form->input('password'); ?>
    </fieldset>
    <?php echo $this->Form->end(__('Login')); ?>
</div>

Voila ce que ca m'affiche

Nom ou mot de passe invalide
Merci d'avance

9 réponses


Romain Chevallier
Réponse acceptée

cakephp 2 doit avoir un debuggeur ou tu peux voir le SQL et tout donc jete un oeil à la doc sinon cakephp 3 est plus simple a utilisé si ton projet est tout neuf tu devrais peut être l'envisager

Lartak
Réponse acceptée

ca peut paraitre bete mais ils se pourrai que lors du login la methode pour encripter ne soit pas la meme que lors de l'enregistrement ? je sais pas comment le verifier ...

Normalement tu ne devrais pas avoir de soucis de ce côté là, mais dans le doute, tu peux toujours spécifier ton système d'encryptage dans la configuration du composant Auth en y ajoutant :

'Form' => array(
    'passwordHasher' => array(
        'className' => 'Simple', 
        'hashType' => 'sha256' // remplacer cette valeur si elle diffère du type de hash que tu utilises (sha1, md5)
    )
)

Bonjour.
À première vue, je ne vois pas d'où pourrait provenir ton problème, mais est-ce que le hachage du mot de passe était bien codé avant la création de l'utilisateur que tu essaies de connecter ?

Bonjour,
oui il etait bien coder, c'est ce que j'ai vérifier en premier

Bonjour,

Autorise ta page login pour les personnes qui ne sont pas connecter ca pourrait aider

bon courage à toi

Merci Romain, j'ai authoriser login, mais le probleme est toujours le meme

dans ta base de donnée le mot de passe est-il bien crypter ou ecris en clair le problème peut venir de là !

Le mot de passe est cripter, ca peut paraitre bete mais ils se pourrai que lors du login la methode pour encripter ne soit pas la meme que lors de l'enregistrement ? je sais pas comment le verifier ...

Merci a tout les deux j'ai finalement tout refais sur Cakephp 3 en adaptant le code est la ca passe, ca restera un mystere a mes yeux de pourquoi ca passais pas maintenant il me reste plus que a adapter le projet sur Cakephp3.

Vraiment merci de votre aide