2012-08-08 9 views
10

FINALMENTE trovato la soluzione:CakePHP 2.1 Effettuare una chiamata ajax jQuery con il componente di sicurezza attivato

Se qualcuno ha questo problema mettere questo nel vostro beforeFilter.

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

e aggiornare librerie a Cake 2,3

Il problema:

sto lottando con la componente sicurezza mi blackholing sulle mie chiamate Ajax.

var id = 1;

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

Sto solo cercando di inviare l'ID per il controller di aggiornare il messaggio in cui id = id

Ma componente di sicurezza mi sta blackholing su tutte le mie chiamate ajax.

Qualcuno sa come posso farlo funzionare con il componente di sicurezza attivato ??

Grazie!

Sei fantastico!

-Tom

suggerimenti ????

UPDATE2 ottengo un errore AUTH da blackhole dopo alcuni test.

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

Ho ricontrollato tutti i nodi ACO, sono buoni. Mi sto appoggiando a un ERRORE di VALIDAZIONE FORM dal componente Sicurezza sulla mia chiamata 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 di sicurezza attivato ?? significa che vuoi cifrare l'ID o nasconderlo nella chiamata Ajax? – coolguy

+0

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

+0

aahhh mio male. Non sono un tipo di torta php ..Im con Zend framework + Jquery. Ci sono molti esperti di Cakephp in SO ..troverai subito ciò che ti serve :) – coolguy

risposta

7

In beforeFilter:

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

SecurityComponent Linea 396:

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

Quindi credo che se si vuole garantire questa azione, è necessario inviare i dati con l'aggiunta di chiave generata '_token'. Questa chiave viene generata utilizzando il metodo Form-> secure ($ fields) (il metodo acctualy genera input nascosti con valori corretti).

Problemi correlati