Bonjour a tous

(et oui c est encore moi :p)

Voila mon soucis, des que j arrive sur mon site sans etre connecter, avant il me redirigais mais controller => joueur et action => connexion

mais mnt j ai ca:

La page n'est pas redirigée correctement

Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas.

La cause de ce problème peut être la désactivation ou le refus
des cookies.

Voici mon AppController:

function beforeFilter() {
        $this->Auth->loginAction = array('controller' => 'joueurs', 'action' => 'connexion', 
            'membre' =>false,'admin' => false);
        $this->Auth->authorize = array('Controller');

        if(!isset($this->request->params'prefix'])){

            $this->Auth->allow(); 

       }

       if(isset($this->request->params'prefix']) && ($this->request->params'prefix'] == 'admin')){
            $this->layout = 'admin';     
       }
    }
    function isAuthorized($user){
        if(!isset($this->request->params'prefix'])){
                return true;
        }

        $statut = array(
           'admin' => 10,
           'modo' => 7,
           'beta' => 4,
           'membre' => 2
           );

        if(isset($statut$this->request->params'prefix']])){

           $lvlAction = $statut$this->request->params'prefix']];
           $lvlUser = $statut$user'statut']];

           if($lvlUser >= $lvlAction){
               return true;
           }else{
               return false;
           }

        }
        return false;
    }

J'avoue etre encore perdu :s

Merci de votre aide futur et passee.

Djou

5 réponses


tonours
Réponse acceptée

Il faut que tu précises ça à ton components Auth si je ne fais pas erreur tu dois faire quelque chose comme ça:
$this->Auth->allow('credit','mon_action_2','etc..'); (dans la fonciton beforeFilter)
C'est nécéssaire juste pour les requestAction qui sont dans la partie publique.
Par exemple:
j'ai mon controller categories_controller, dedans j'ai une fonction getCat:

function getCat(){
        $menu = $this->Category->find('all');
        return $menu;
    }

elle va me récupérer les catégories,
ensuite j'ai un element menu.ctp dans lequel je fais un RequestAction, cet élément est visible sur toutes les pages (il est dans default.ctp):

<?php
    $menu = $this->requestAction(array(
        'controller'=>'categories',
        'action'=>'getCat'));
?>

Comme cet élément est dans mon default.ctp via

<?php echo $this->element('menu'); ?>

si je n'autorise pas cette action,
lorsque cakephp va faire son boulot et me rediriger vers /users/login (par exemple) il va se dire,
"Je te redirige vers /users/login/ parce que pour aller à cet endroit tu dois être loggé, cependant je peux pas t'afficher la page /users/login car l'action getCat tu n'as pas le droit d'y accéder si t'es pas loggé"
Et comme l'action getCat est appelé dans /users/login (vu que là dans mon exemple c'est un menu présent sur toutes les pages) tu l'as dans l'os, car pour que la fonction getCat se fasse tu dois être loggé, mais pour te logger tu dois aller sur /users/login qui contient l'action getCat, mais tu n'as pas le droit d'accéder à getCat si t'es pas loggé donc cakephp te redirige, et ainsi de suite ce qui te fais TADAM une boucle infie ! : )
Voilà !

Salut, est ce que tu as un RequestAction quelque part (pour ton menu par exemple si tu as suivis le tutoriel portfolio) ?
Si oui ça viens de ça : )

pikadjou
Auteur

ou j en ai et plus que un :p
voici un exemple d un.

$this->requestAction(array("controller"=>"Menus", "action"=>"credit", 'membre' => false))

Je dois definir un layout par defaut pour cette action alors?
si oui je peux direct le mettre dans la function?

pikadjou
Auteur

Merci bcp pour la reponse ca fonctionne nicquel

De rien ; )