Подтвердить что ты не робот

CakePHP 2.1 делает вызов jquery ajax с включенным компонентом безопасности

НАКОНЕЦ нашел решение:

Если у кого-то есть эта проблема, поместите это в свой предварительный фильтр.

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

И обновите libs до Cake 2.3

Проблема:

Я борюсь с компонентом SECURITY, чей-то чей-то голос на моих аякс-звонках.

var id = 1;

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

Я только пытаюсь отправить идентификатор контроллера для обновления сообщения, где id = id

Но компонент безопасности Blackholing меня на всех моих вызовах ajax.

Кто-нибудь знает, как я могу заставить его работать с активированным компонентом безопасности?

Спасибо!

Ты потрясающий!

-Tom

Предложения????

UPDATE2 После некоторых испытаний я получаю ошибку AUTH из черной дыры.

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

Я дважды проверял все узлы ACO, они хороши. Я прислоняюсь к ОШИБКЕ УДАЛЕНИЯ ФОРМЫ из компонента безопасности при моем вызове 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;
    }
4b9b3361

Ответ 1

В beforefilter:

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

Ответ 2

SecurityComponent строка 396:

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

Итак, я думаю, если вы хотите защитить это действие, вы должны отправить данные с помощью дополнительного сгенерированного ключа "_Token". Этот ключ генерируется с использованием метода Form- > secure ($ fields) (метод acctualy генерирует скрытые входы с соответствующими значениями).