2012-08-08 33 views
5

處理我的ajax調用secuity組件不會像他們應該的那樣。Cakephp 2安全組件和ajax調用

如何在cakephp 2.x中處理它?

Appcontroller.php

public function beforeFilter() { 
     $this->Security->blackHoleCallback = 'blackhole'; 
     if ($this->request->is('ajax')) { 
      $this->Security->validatePost = false; 
     } 

似乎不工作...

回答

3

您仍然可以使用Cake的形式提供的安全機制的安全Ajax調用。 要做到這一點,渲染一個不可見的窗體並放置輸入來存儲ajax調用參數。然後,用JavaScript在表單中設置這些參數並通過序列化來完成ajax調用。請記住,如果您啓用了CSRF檢查(並且每會話一個令牌被禁用),則必須使用新的有效CSRF令牌更新該表單(可以使用$this->request->params['_Token']['key']在控制器中讀取該令牌)。

實施例:

<?php 
    echo $this->Form->create('AjaxForm'); 
     echo $this->Form->hidden('value'); 
    echo $this->Form->end(); 
?> 

<script>  
    function makeAjaxCall() { 
     $.post(
      ajaxUrl, 
      $('#AjaxForm').serialize(), 
      function(data) { 
       $('#AjaxForm [name="data[_Token][key]"]').val(data.newCsrfToken) 
      } 
     ); 
    }; 
</script> 

爲了進一步參考,我們已經創建了一個組件,它允許維持對被dinamically修改的客戶機側的形式啓用安全性,並且消除了需要解鎖字段或使Ajax時的動作調用。你可以在https://github.com/QTSdev/DynamicSecurity找到它。

+0

組件(和Github頁面)已經消失。你有新鏈接嗎? – schnauss 2015-04-06 21:05:37