2012-08-08 13 views
5

Der Umgang mit Sicherheits-Komponente auf meinem Ajax ruft nicht so, wie sie sollten.CakePHP 2 Security-Komponente und Ajax Anrufe

Wie gehen Sie damit in Cakephp 2.x?

Appcontroller.php

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

nicht zu funktionieren scheinen ...

Antwort

3

Sie können immer noch sicher Ajax-Aufrufe machen Sicherheitsmechanik mit Cake Verfügung gestellte Formular. Rendern Sie dazu ein nicht sichtbares Formular und platzieren Sie Eingaben, um die Ajax-Aufrufparameter zu speichern. Dann setze diese Parameter mit Javascript in deinem Formular und führe den Ajax-Aufruf durch Serialisierung durch. Denken Sie daran, dass Sie das Formular mit einem neuen gültigen CSRF-Token aktualisieren müssen, wenn CSRF-Prüfung aktiviert ist (und ein Token pro Sitzung deaktiviert ist) (Sie können es im Controller mit $this->request->params['_Token']['key'] lesen).

Beispiel:

<?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> 

Für weitere Referenz, wir eine Komponente erstellt haben, die Sicherheit auf Client-Seite Formulare aktiviert zu halten, ermöglicht es, die dinamically modifiziert werden, und beseitigt die Notwendigkeit, Felder oder Aktionen zu entsperren, wenn Ajax machen Anrufe. Sie können es unter https://github.com/QTSdev/DynamicSecurity finden.

+0

Die Komponente (und die Github-Seite) sind verschwunden. Hast du einen neuen Link? – schnauss