2012-08-08 19 views
10

FINALMENTE encontrado la solución:CakePHP 2.1 Realizar una llamada ajax jquery con el componente de seguridad activa

Si alguien tiene este problema ponga esto en su beforeFilter.

$this->Security->unlockedActions = array('givestar'); 

y actualizar liberaciones a la torta de 2,3

El problema:

estoy luchando con el componente de seguridad me blackholing en mis llamadas ajax.

var id = 1;

$.ajax({ 
    type: "post", 
    url: "/messages/givestar/", 
    data: {"id" : id}, 
    dataType: "json" 
}); 

Sólo estoy tratando de enviar el ID del controlador para actualizar el mensaje donde id = id

Pero componente de Seguridad me está blackholing en todas mis llamadas ajax.

¿Alguien sabe cómo puedo hacerlo funcionar con el componente de seguridad activado?

Gracias!

¡Eres increíble!

-Tom

Sugerencias ????

UPDATE2 Aparece un error AUTH de blackhole después de algunas pruebas.

From Book: 
‘auth’ Indicates a form validation error, or a controller/action mismatch error. 

He comprobado dos veces todos los nodos ACO, son buenos. Me estoy apoyando en un ERROR DE VALIDACIÓN DE FORMULARIO del componente Seguridad en mi llamada ajax.

UPDATE:

AppController.php

public $components = array(
     'Acl', 
     'Auth', 
     'Session', 
    'Security', 
    'Cookie' 
    ); 
public function beforeFilter() { 
    $this->Security->blackHoleCallback = 'blackhole'; 
} 
public function blackhole($type) { 
    $this->Session->setFlash(__('ERROR: %s',$type), 'flash/error'); 
} 

MessagesController.php

public $components = array('RequestHandler'); 

     public function beforeFilter() { 
      parent::beforeFilter(); 
     } 

public function givestar() { 
     $this->autoRender = false; 
      if ($this->request->is('ajax')) { 

       echo 'Working'; 
      } 
     return; 
    } 
+0

componente de seguridad activado ?? ¿Quiere decir que quiere encriptar el 'id' u ocultarlo en la llamada ajax? – coolguy

+0

http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html – Tom

+0

aahhh my bad. No soy un tipo de pastel php .. Im con Zend framework + Jquery. Hay muchos expertos CakePHP en SO ...encontrará lo que necesita en breve :) – coolguy

Respuesta

7

En beforeFilter:

$this->Security->unlockedActions = array('givestar'); 
2

línea SecurityComponent 396:

if (!isset($controller->request->data['_Token'])) { 
    if (!$this->blackHole($controller, 'auth')) { 
     return null; 
    } 
} 

Así que supongo que si usted desea asegurar esta acción debe enviar datos con clave adicional generada '_Token'. Esta clave se genera utilizando el método Form-> secure ($ fields) (el método acctualy genera entradas ocultas con los valores adecuados).

Cuestiones relacionadas