Erreur controlleur lorsque la session expire

Par romses, il y a 10 ans


Bonjour,
j'utilise cakephp 2.7, suis débutant
Voila je rencontre un petit problème avec mon code.
Lorsque ma connexion expire la redirection vers mon controlleur de connexion ComtresControlleur dans le appControlleur change et pointe vers le controlleur UsersControlleur. et je me retrouve avec une erreur de redirection que je ne comprens pas

Ce que je fais

Dans mon controlleur AppControlleur j'ai ceci qui fonctionne au début

class AppController extends Controller { public $helpers = array('Session','Html','Form','Js','Paginator','Cache'); public $components = array( 'Session', 'Auth' =>array( 'authenticate' => array( 'Form' => array( 'userModel' => 'Compte', 'fields' => array( 'username' => 'pseudo', // 'username' par défaut 'password' => 'motdepasse'), // 'password' par défaut 'userFields' => array('pseudo','motdepasse','role'), 'passwordHasher' => array( 'className' => 'Simple', 'hashType' => 'sha256' ) ) ), 'redirect' => array('controller' => 'Comptes', 'action' => 'login'), 'loginAction' => array('controller' => 'Comptes', 'action' => 'login'), 'loginRedirect' => array('controller' => 'Personnels','action' => 'index'), 'logoutRedirect' => array('controller' => 'Comptes','action' => 'login'), 'authorize' => array('Controller') ) ); public $uses = array('Requete','Interventionrequete'); public function beforeFilter() { parent::beforeFilter(); //$this->Auth->allow('membre_addclient','login'); if($this->Session->check('service')) { $number = $this->Requete->find('count',array( 'conditions' => array('etat' => 0, 'services_id' => $this->Session->read('service')) ) ); $this->Session->write('notifrequete',$number); } elseif($this->Session->check('person')) { $number = $this->Interventionrequete->find('count',array( 'fields' => array('Requete.etat','Requete.type','Requete.description','details','Interventionrequete.id','Requete.id','Interventionrequete.created'), 'conditions' => array('Requete.etat !=' => 1,'Interventionrequete.clients_id' => $this->Session->read('person')), 'recursive' => 0 )); $this->Session->write('notifrequete',$number); } } public function isAuthorized($user) { //parent::isAuthorized($user); return true; } }

et dans mon fichier de route j'ai ceci:

Router::connect('/', array('controller' => 'Comptes', 'action' => 'login'));

qui est la seule route présente.

Ce que je veux

Je veux que lorsque ma session expire, que je sois redirigé vers la page de connexion comme configurer dans le AppControlleur

Ce que j'obtiens

le controlleur UserControlleur est introuvable il faut créer ce controlleur

quelqu'un pardon a déjà eu ce type de problème? a l'aide s'il vous plait

18 réponses

Grafikart, il y a 10 ans

Je ne vois aucune mention de UsersController dans ton code du coup du mal à voir ou le problème apparait. Quand tu parle de session qui expire, tu clique sur un bouton "se déconnecter" ?

romses, il y a 10 ans

Non lorsque je fait plus de 30 minutes sans me connecter et que j'actualise une page je retrouve redirigé vers la page de login du controlleur UsersController qui est absent.
Je ne sais pas si c'est un problème de session ou de configuration

romses, il y a 10 ans

voila le message que je reçois en clair:

Error: UsersController could not be found.

Error: Create the class UsersController below in file: app\Controller\UsersController.php

Grafikart, il y a 10 ans

Je dirais que ça vient de la configuration mais sur le papier tu l'as faite correctement :(

romses, il y a 10 ans

dans mon boostrap.php j'ai ceci:

<?php CakePlugin::loadAll(); */ Configure::write('Dispatcher.filters', array( 'AssetDispatcher', 'CacheDispatcher' )); App::uses('CakeLog', 'Log'); CakeLog::config('debug', array( 'engine' => 'File', 'types' => array('notice', 'info', 'debug'), 'file' => 'debug', )); CakeLog::config('error', array( 'engine' => 'File', 'types' => array('warning', 'error', 'critical', 'alert', 'emergency'), 'file' => 'error', ));

et dans mon core ceci:

<?php Configure::write('debug', 2); Configure::write('Error', array( 'handler' => 'ErrorHandler::handleError', 'level' => E_ALL & ~E_DEPRECATED, 'trace' => true )); Configure::write('Exception', array( 'handler' => 'ErrorHandler::handleException', 'renderer' => 'ExceptionRenderer', 'log' => true )); Configure::write('App.encoding', 'UTF-8'); Configure::write('Routing.prefixes', array('admin','membre')); Configure::write('Cache.check', true); Configure::write('Session', array( 'defaults' => 'php' )); Configure::write('Security.salt', 'mediaDYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mitarget'); Configure::write('Security.cipherSeed', '20015768593096574535424967496836452015'); Configure::write('Acl.classname', 'DbAcl'); Configure::write('Acl.database', 'default'); $engine = 'File'; // In development mode, caches should expire quickly. $duration = '+999 days'; if (Configure::read('debug') > 0) { $duration = '+10 seconds'; } Cache::config('_cake_core_', array( 'engine' => $engine, 'prefix' => $prefix . 'cake_core_', 'path' => CACHE . 'persistent' . DS, 'serialize' => ($engine === 'File'), 'duration' => $duration )); Cache::config('_cake_model_', array( 'engine' => $engine, 'prefix' => $prefix . 'cake_model_', 'path' => CACHE . 'models' . DS, 'serialize' => ($engine === 'File'), 'duration' => $duration ));

dans ma route juste ceci:

Router::connect('/', array('controller' => 'Comptes', 'action' => 'login'));

je ne comprends pas le pourquoi après un certains temps ma session s'expire et change de route

Grafikart, il y a 10 ans

Si tu fais le bourrin et lance une recherche sur le mot clef "Users" ça te trouve des trucs ?

romses, il y a 10 ans

salut je ne sais pas ce que c'est que le bourrin et coment ont fais la recherche pouvez vous me l'expliquez?

Majid Cameleon, il y a 10 ans

Je pense qu'il t'indique de rechercher dan tout tes fichiers le mots "Users" et voir si une rediction traine quelque part.
Si non, est-ec des cookies serait la cause des déconnections ?

romses, il y a 10 ans

Ok merci, je cherche dans les fichier et rien de user trouvé

Majid Cameleon, il y a 10 ans

Cookies, t'a regardé ?
T'es en production ou le site est déjà déployé ?

romses, il y a 10 ans

je suis en production j'ai vidé le cache de mon navigateur et les coockies de sessions mais toujours rien

freezlike, il y a 10 ans

Bonjour,

ce n'est ni une erreur de cache ni de session normalement cette erreur est fréquente qu'à mon avis ça puisse être un bug du framework parce que y a un Override sur le Model User en Compte donc quand il fait un loginRedirect pour lui c'est toujours UsersController et non ComptesController à essayer pour éliminer cette hypothèse

Cordialement.

romses, il y a 10 ans

Merci freezlike,
mais comment proceder ?car je ne comprends pas ce qu'il faut faire

freezlike, il y a 10 ans

Je t'en prie,

essaie de Changer Compte en User je sais que ça sera pénible mais faut voir si le bug vient de la

Cdt.

romses, il y a 10 ans

waouh freezlike,
ça c'est un travail de TITAN

freezlike, il y a 10 ans

oui j'avoue mais essaie de prendre 2 controlleurs à part pour tester ou quelque chose comme ça mais perso j'aurais utilisé les standards de Cakephp et non pas une redéfinition.

romses, il y a 10 ans

Ok freezlike
vu que le problème reviens regulièrement je suis obligé de me penché dans cette optique. Mais je pense ça doit être un bug parceque tout les projets dont j'ai développés avec cette version ont ce même problème de redirection vers le controlleur UsersControlleur.
Moi j'aime pas trop l'idée d'utiliser certains eléments par défaut just pour avoir le control total sur mes actions. Encor Merci à vous tous

freezlike, il y a 10 ans

d'accord test ça pour nous et donne nous un feedback s'il te plaît, merci.