2012-08-08 10 views
10

WRESZCIE znalazł rozwiązanie:CakePHP 2.1 Nawiązywanie połączenia jquery ajax z elementem bezpieczeństwa aktywowane

Jeśli ktoś ma ten problem umieścić to w swoim beforeFilter.

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

i aktualizować libs do ciasta 2.3

Problem:

walczę z elementem bezpieczeństwa blackholing mnie na rozmowy AJAX.

var id = 1;

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

Ja tylko próbuje wysłać identyfikator dla kontrolera zaktualizować wiadomość gdzie id = id

Ale komponent Security Blackholing mnie we wszystkich moich ajax połączeń.

Ktoś wie, w jaki sposób mogę sprawić, aby działała z włączonym komponentem bezpieczeństwa?

Dzięki!

Jesteś świetny!

-Tom

Sugestie ????

UPDATE2 Po wykonaniu niektórych testów pojawia się błąd AUTH z blackhole.

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

Mam podwójne sprawdzenie wszystkich węzłów ACO, są one dobre. Opieram się przeciwko BŁĘDOWI WALCZENIA FORMULARZA od komponentu Security w moim wywołaniu 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

element bezpieczeństwa aktywny? oznacza, że ​​chcesz zaszyfrować 'id' lub ukryć go w wywołaniu ajax? – coolguy

+0

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

+0

aahhh moje złe. Nie jestem facetem php do ciast ..Im z Zend Framework + Jquery. Istnieje mnóstwo ekspertów Cakephp w SO ..wkrótce znajdziesz to, czego potrzebujesz :) – coolguy

Odpowiedz

7

W beforeFilter:

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

SecurityComponent Linia 396:

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

Więc myślę, że jeśli chcesz zabezpieczyć tę czynność należy wysłać dane z dodatkowym wygenerowanego klucza „_Token”. Ten klucz jest generowany za pomocą metody Form-> secure ($ fields) (metoda acctualy generuje ukryte dane wejściowe z odpowiednimi wartościami).

Powiązane problemy