2012-08-08 7 views
10

FINALLYを有効に解決策が見つかりました:誰もがあなたのbeforeFilterでこれを入れて、この問題が発生した場合のCakePHP 2.1は

を。ケーキ2.3へ

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

と更新のlibs

問題:

私は私のAJAX呼び出しに私をブラックホール化セキュリティコンポーネントに苦しんでいます。

var id = 1;

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

私はID = ID

しかし、セキュリティコンポーネントはすべて私のAJAX呼び出しに私をブラックホール化されたメッセージを更新するために、コントローラのIDを送信しようとしています。

セキュリティコンポーネントを使用して動作させる方法は誰でも知っていますか?

ありがとうございます!

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

-tom

提案

アップデート2 は、私はいくつかのテストの後にブラックホールからのAUTHエラーが発生します。

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

私はACOノードをすべてダブルチェックしています。私は、私のajax呼び出しでSecurityコンポーネントからFORM VALIDATION ERRORに賛成です。

UPDATE:のbeforeFilterで

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

セキュリティコンポーネントが有効になっていますか?あなたは 'id'を暗号化するか、ajax呼び出しでそれを隠すことを意味しますか? – coolguy

+0

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

+0

aahhh私の悪い。私はZendフレームワーク+ Jquery.Thereにはケーキの専門家がたくさんいます。あなたはすぐに必要なものを見つけるでしょう:) – coolguy

答えて

7

$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メソッドは、適切な値で隠し入力を生成します)。

関連する問題