2012-08-08 24 views
5

Manejo del componente de seguridad en mis llamadas ajax que no funcionan como deberían.Cakephp 2 Componente de seguridad y llamadas ajax

¿Cómo lo manejas en cakephp 2.x?

Appcontroller.php

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

no parece funcionar ...

Respuesta

3

Aún se pueden hacer llamadas ajax seguras utilizando la mecánica de seguridad proporcionadas forma de torta. Para hacer esto, muestra un formulario no visible y coloca entradas para almacenar los parámetros de llamada ajax. Luego, con Javascript establezca estos parámetros en su formulario y haga la llamada ajax serializándolo. Recuerde que si tiene activada la verificación CSRF (y la desactivación de un token por sesión) tendrá que actualizar el formulario con un nuevo token CSRF válido (puede leerlo en el controlador con $this->request->params['_Token']['key']).

Ejemplo:

<?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> 

Para mayor referencia, hemos creado un componente que permite mantener la seguridad habilitada en los formularios del lado del cliente que se modifican dinámicamente, y elimina la necesidad de desbloquear los campos o acciones al hacer ajax llamadas. Puede encontrarlo en https://github.com/QTSdev/DynamicSecurity.

+0

El componente (y la página Github) han desaparecido. ¿Tienes un nuevo enlace? – schnauss

Cuestiones relacionadas