Bonjour désolé de redéranger,
j'ai un gros problème dans mon application que je développe avec cakephp, ma function login() bug. La session ne s'enregistre pas mais en revenche le $this->Auth->login() marche car après je fais un redirect qui marche seulement si l'on rentre dans un if. Voila mon code :

Controller :

public function login(){
    if($this->request->is('post')){
        if($this->Auth->login()){
            $this->Session->setFlash('Vous avez bien été connecté', 'flash', array('class' => 'success'));
            return $this->redirect(array('controller' => 'pages', 'action' => 'account', 'admin' => true));
        }else{
            $this->Session->setFlash('Votre couple login / mot de passe n\'est pas valide', 'flash', array('class' => 'success'));
            $this->request->data['User']['password'] = '';
        }
    }
}        

La vue :

<?php $this->set('title_for_layout', 'Se connecter'); ?>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <?= $this->Form->create('User'); ?>
            <?= $this->Form->input('email', array('label' => 'Adresse email', 'div' => 'form-group', 'class' => 'form-control')); ?>
            <?= $this->Form->input('password', array('label' => 'Mot de passe', 'div' => 'form-group', 'class' => 'form-control')); ?>
        <?= $this->Form->end('Se connecter'); ?>
    </div>
</div>

Merci d'avance et bonne soirée

9 réponses


Arnaud Mcho Scott
Réponse acceptée

Bonjour,

as-tu regarder en détail ce que faisait la fonction login de Auth?
Et comme l'as Wa3aR si tu as un user dans $this->Auth->user() c'est que tu as un user de logger dans ton application...
Fais une fonction pour déconnecter ton utilisateur pour être sûr que tu n'ai personne de logger.

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

tu peux aussi checker que tu as un user connecté grace au composant authenticate

// Utilisez n'importe où
AuthComponent::user('id')

// Depuis l'intérieur du controler
$this->Auth->user('id');

Si tu as besoin de plus d'informations je te conseil de lire attentivement le cookbook de cakephp

http://book.cakephp.org/2.0/fr/core-libraries/components/authentication.html

essaie de faire un

if($this->Auth->login()){
              debug($this->Auth->user);
              die();
              $this->Session->setFlash('Vous avez bien été connecté', 'flash', array('class' => 'success'));
              return $this->redirect(array('controller' => 'pages', 'action' => 'account', 'admin' => true));
}

et regarde ce que cela renvoie. Si le tableau est vide c'est qu'il n'a pas réussi à connecter l'utilisateur. Sur quelle version de cakePHP es-tu ?

Imillix
Auteur

Salut, merci j'essaye ça demain et je suis sur CakePHP 2.X (je ne sais plus exactement quelle version désolé)

Imillix
Auteur

Je viens d'essayer et j'ai même pas un tableau, juste null

Tu peux nous poster la manière dont tu as déclaré ton componenent Auth ? Tu utilises une adresse email pour l'authentification donc je suppose que tu as du faire les modifs nécessaires ? (et pour les debug auth, il faut rajouter () à la fin :

debug($this->Auth->user()); 
Imillix
Auteur

Voila mon tableau components :

public $components = [
        'Session',
        'Cookie',
        'DebugKit.Toolbar',
        'Auth' => array(
            'loginAction' => array(
                'controller' => 'users',
                'action' => 'login',
                'admin' => false
            ),
            'authenticate' => array(
                'Form' => array(
                    'fields' => array('username' => 'email')
                )
            )
        ),
        'Security' => array(
            'csrfExpires' => '+1 hour'
        )
    ];
Imillix
Auteur

Je viens d'essayer avec $this->Auth->user(); et j'ai bien mon tableau qui retourne toutes les informations de l'utilisateur. Mais ma fonction login() ne marche pas
J'ai pensé que au pire, je pourrais faire :

if($this->Auth->login()){
    $this->Session->write('Auth.User, $this->Auth->user());
}

mais je ne sais pas si vous avez une meilleure idée

Si la fonction $this->Auth->user() te retourne les informatiosn utilisateurs c'est que tu es bien connecté ! Je ne vois pas pourquoi tu dis que ta fonction login fonctionne mal.

Imillix
Auteur

Je dis qu'elle fonctionne mal car :

  1. Je ne suis pas redirigé alors que je fais un redirect juste après
  2. Quand je vais dans l'inspecteur de Google Chrome > Ressources > Session Storage > http://local.dev, je n'ai rien (normalement je suis sensé avoir des informations non ?)
  3. J'ai fais un menu qui change en fonction que l'on soit connecté ou non et la le menu est comme si je n'étais pas connecté