Bonjour,

Ayant activer le sécurity component dans mon controlleur je n'arrive plus à faire des requetes ajax avec angularjs car la console m'affiche bad request et le message '_Token' was not found in request data.

Ce que je fais

Dans mon controlleur ComptesControlleur j'ai ceci

 public function initialize()
    {
        parent::initialize();
         $this->loadComponent('Flash');
        $this->loadComponent('RequestHandler');
        $this->loadComponent('Security');

    }

    // et ceci dans l'action a executé

    public function AfficheDetail()
    {
        debug($this->request->data);die();
    }

dans mon App.js de angular, j'ai ceci:

 $scope.DetailChoix  = function(choix)
    {

        if(typeof parseInt(choix) === "number")
        {

            var  link = path.substring(0 ,path.lastIndexOf( "/")) + '/AfficheDetail';
                 $http.post(link,{'choix':choix}).success(function(data){
                    if(data.valid == 0)
                    {
             notification(300,"Mise à jour effectuée avec success","primary","Reception d'un Colis")

                    }
                }); 

        } 
        else
        {
          alert("Impossible de continuer");  
        }  

    }

dans ma vue, j'ai bien mon formulaire créer avec le formhelper comme ceci:

<?= $this->Form->create($compte,['type'=>'post','class'=>'form-horizontal form-bordered']) ?>
    <div class="col-md-6">
                                                <div class="form-group">
                                                <label class="col-md-4 control-label"><?= __('Pack ') ?></label>
                                                <div class="col-md-8 control-label">
                                                    <div class="input-group">
                                                        <span class="input-group-addon">
                                                            <i class="fa fa-credit-card"></i>
                                                        </span>
                                                        <?php echo $this->Form->input('pacquage_id',['options'=>$pack,'type'=>'select','label'=>false,'div'=>false,'class'=>'form-control ',"ng-model"=>"ngchoix","ng-change"=>"DetailChoix(ngchoix)"]) ?>
                                                        <?= $this->Form->unlockField('pacquage_id'); ?>

                                                    </div>
                                                </div>
                                                </div>
                                            </div>

                                            <?= $this->Form->end(); ?>

Ce que je veux

JE veux pouvoir sécuriser les informations que j'envoies par ajax vers mon controlleur Comptes

Ce que j'obtiens

'_Token' was not found in request data.
Cake\Controller\Exception\AuthSecurityException

1 réponse


Tu peux regarder du coté du X-CSRF-Token.
Tu dois pouvoir modifier l'en-tête de ta requete HTTP en passant le token. Le token peut être généré par CakePHP de cette manière

<?php echo $this->request->getParam('_csrfToken'); ?>