Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je cherche à ajouter la sécurité dans mon site en utilisant le composant Csrf de cakephp 3
pour cela j'ai un controller ColisController ou j'ai ceci:

public function initialize()
    {
        parent::initialize();
        if(env('HTTPS'))
        {
            $this->loadComponent('Csrf',['secure'=>true]);
        }
            else
            {
                $this->loadComponent('Csrf');
            }

    }

    public function beforeFilter(\Cake\Event\Event $event) {
     if (in_array($this->request->action, ['bordereaux','destination_bordereaux'])) {
         $this->eventManager()->off($this->Csrf);
        }
      }
      //fonction affichage du formulaire
        public function Bordereaux()
    {
      //$this->eventManager()->off($this->Csrf);
        if($this->request->is('post'))
        {
            execution du form
        }

    }

    // fonction de récupération des données

       public function DestinationBordereaux()
    {
     // $this->eventManager()->off($this->Csrf);
        $this->autoRender = false;

          $result['destination'] = $this->Colis->Agences->find()
                            ->select(['nom_agence','id','ville'])
                            ->where(['id !='=>$this->Auth->user('agence_id')])
                            ->all();

                            debug($result);die();

        $users = TableRegistry::get('Administrations.Users');

         $result['chauffeur'] = $users->find()
                            ->select(['nom','id','prenom'])
                            ->contain(['Groupes'=>function($user){
                                return $user->select(['id'])
                                            ->where(['nom_groupe'=>'Chauffeur']);
                            }])
                            ->all();

         $data = json_encode($result);
         echo $data;
         die();

    }
     enfin dans ma vue bordereau j'ai ceci:

     <div class="row" ng-controller="AgencesCtrl" ng-init="loadDestination()">
 <?php echo $this->Form->create(NULL,['id' =>'form-ui','type' =>'file','inputDefaults'=> ['div'=>false]]); ?>
<div class="col-lg-3 col-md-3">

    <div class="form-group">

        <div class="col-lg-12">
        <select  class="form-control" required="required" data-ng-model="form.destination"   name="destination" data-ng-change="loadColis(form.destination)">
                 <option value='' disabled selected>Choisir la destination</option>

                  <option ng-repeat="option in destinations" value="{{option.id}}" ng-bind="option.nom_agence + '-('+ option.ville +')'"></option>
            </select>
        </div>
    </div>
</div>
 <?php echo $this->Form->end();?>
</div>

Ce que je veux

Je veux que lorsque j'execute mon action bordereau, que les menus déroulants du formulaire soient soient remplie

Ce que j'obtiens

j'obtient une erreur 403 du genre je n'ai pas access à la ressourece.

mais ce que je constate est que si je retire le composant $this->loadComponent('Csrf') dans ma fonction initialise, tout ce passe bien mais l'ajout du composant me retire les doits je ne sais pas si c'est un trou noir.
je ne sais pas si quelqu'un a une idée de quoi je parle SVP à l'aide!!

cordialement

2 réponses


romses
Auteur

Personne n'as encore eu ce problème?
je cherche depuis mais rien, mon soucis est de pouvoir faire des listes dynamiques avec angularjs et cakephp, vue que le helper de cake est en php alors j'ai préférer surcharger le formulaire en ajoutant des champs input classique. Lorsque j'ajoute le composant csrf dans ma fonction initialize du controller, j'ai une erreur 403,j'aimerai comprendre le pourquoi.

SVP

Tu utilises le composant Secure ? Si tu créés ou modifies certaines valeurs dans tes input/select, le composant renverra une erreur.