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


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
Auteur

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
Auteur

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

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

romses
Auteur

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

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

romses
Auteur

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

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
Auteur

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

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

romses
Auteur

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

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
Auteur

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

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
Auteur

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

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
Auteur

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

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