10

最終的に解決策を見つけました:

誰かがこの問題を抱えている場合は、これを beforefilter に入れてください。

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

ライブラリを Cake 2.3 に更新します。

問題:

ajax 呼び出しで私をブラックホール化する SECURITY コンポーネントに苦労しています。

変数 ID = 1;

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

コントローラーのIDを送信して、id = idのメッセージを更新しようとしているだけです

しかし、セキュリティコンポーネントは、すべての ajax 呼び出しで私をブラックホール化しています。

セキュリティコンポーネントを有効にして動作させる方法を知っている人はいますか??

ありがとう!

あなたは素晴らしいです!

-トム

提案????

UPDATE2 いくつかのテストの後、ブラックホールから AUTH エラーが発生しました。

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

すべての ACO ノードを再確認しましたが、問題ありません。私は ajax 呼び出しでセキュリティ コンポーネントからの FORM VALIDATION ERROR に頼っています。

アップデート:

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;
    }
4

2 に答える 2

7

beforefilter で:

$this->Security->unlockedActions = array('givestar');
于 2012-08-08T20:58:30.990 に答える
2

SecurityComponent 行 396:

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

したがって、このアクションを保護したい場合は、生成された追加の「_Token」キーを使用してデータを送信する必要があると思います。このキーは Form->secure($fields) メソッドを使用して生成されます (実際にはメソッドは適切な値で非表示の入力を生成します)。

于 2013-04-02T07:14:41.280 に答える