Problème $this->Auth->login() cakephp

Par Imillix, il y a 11 ans


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

StarTechs, il y a 11 ans

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, il y a 11 ans

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

Imillix, il y a 11 ans

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

Wa3aR, il y a 11 ans

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, il y a 11 ans

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, il y a 11 ans

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

Wa3aR, il y a 11 ans

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, il y a 11 ans

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é
Arnaud Mcho Scott, il y a 11 ans

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