2012-08-08 24 views
10

CUỐI CÙNG tìm thấy các giải pháp:CakePHP 2.1 thực hiện một cuộc gọi jquery ajax với thành phần an ninh được kích hoạt

Nếu ai có vấn đề này đặt điều này trong beforeFilter của bạn.

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

Và cập nhật libs để Bánh 2,3

Vấn đề:

Tôi đang đấu tranh với các thành phần AN blackholing tôi trên cuộc gọi ajax của tôi.

var id = 1;

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

Tôi chỉ cố gắng để gửi ID cho bộ điều khiển để cập nhật thông điệp nơi id = id

Nhưng thành phần Security Blackholing tôi trên tất cả các cuộc gọi ajax của tôi.

Bất kỳ ai biết cách tôi có thể làm cho nó hoạt động với thành phần bảo mật được kích hoạt ??

Cảm ơn!

Bạn thật tuyệt vời!

-Tom

Gợi ý ????

UPDATE2 Tôi gặp lỗi AUTH từ lỗ đen sau một số thử nghiệm.

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

Tôi đã kiểm tra kỹ tất cả các nút ACO, chúng rất tốt. Tôi đang dựa vào MẪU L VALI ĐỊNH HIỆU MẪU từ thành phần Bảo mật trong cuộc gọi ajax của tôi.

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

thành phần bảo mật được kích hoạt ?? có nghĩa là bạn muốn mã hóa 'id' hoặc ẩn nó trong cuộc gọi ajax? – coolguy

+0

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

+0

aahhh xấu của tôi. Im không phải là một chàng trai php bánh ..Im với Zend framework + Jquery.There rất nhiều chuyên gia CakePHp trong SO ..bạn sẽ tìm thấy những gì bạn cần ngay :) – coolguy

Trả lời

7

Trong beforeFilter:

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

Dòng SecurityComponent 396:

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

Vì vậy, tôi đoán nếu bạn muốn bảo vệ hành động này Bạn phải gửi dữ liệu bằng phím '_Token' được tạo bổ sung. Khóa này được tạo bằng phương thức Form-> secure ($ fields) (phương thức acctualy tạo ra các đầu vào ẩn với các giá trị thích hợp).

Các vấn đề liên quan