2012-08-08 14 views
5

Gestire la componente di sicurezza sulle mie chiamate ajax non sta andando come dovrebbero.Cakephp 2 Componente di sicurezza e chiamate ajax

Come gestirlo con cakephp 2.x?

Appcontroller.php

public function beforeFilter() { 
     $this->Security->blackHoleCallback = 'blackhole'; 
     if ($this->request->is('ajax')) { 
      $this->Security->validatePost = false; 
     } 

Non sembra funzionare ...

risposta

3

È comunque possibile effettuare chiamate ajax sicure utilizzando la meccanica di sicurezza modulo fornito di torta. Per fare ciò, eseguire il rendering di un modulo non visibile e posizionare gli input per memorizzare i parametri di chiamata ajax. Quindi, con Javascript imposta questi parametri nel tuo modulo e fai la chiamata ajax serializzandola. Ricorda che se hai abilitato il controllo CSRF (e un token-per-sessione è disabilitato) dovrai aggiornare il modulo con un nuovo token CSRF valido (puoi leggerlo nel controller con $this->request->params['_Token']['key']).

Esempio:

<?php 
    echo $this->Form->create('AjaxForm'); 
     echo $this->Form->hidden('value'); 
    echo $this->Form->end(); 
?> 

<script>  
    function makeAjaxCall() { 
     $.post(
      ajaxUrl, 
      $('#AjaxForm').serialize(), 
      function(data) { 
       $('#AjaxForm [name="data[_Token][key]"]').val(data.newCsrfToken) 
      } 
     ); 
    }; 
</script> 

Per ulteriori riferimenti, abbiamo creato un componente che permette di mantenere la sicurezza abilitata su moduli lato client che vengono dinamicamente modificati, ed elimina la necessità di sbloccare i campi o le azioni quando si effettuano ajax chiamate. Puoi trovarlo allo https://github.com/QTSdev/DynamicSecurity.

+0

Il componente (e la pagina Github) sono scomparsi. Hai un nuovo link? – schnauss