संरक्षण सुरक्षा घटक द्वारा प्रदान की बुनियादी सुविधाओं में से एक है। जब तक यह सक्षम है, यह सभी POSTs को फॉर्म सबमिशन के रूप में पेश करने जा रहा है।
एक नियमित हाथ से कोडित HTML फॉर्म सुरक्षा घटक सक्षम के साथ काम नहीं करेगा, इसलिए न तो JQuery- उत्पन्न पोस्ट होगा। आप निश्चित रूप से $this->Security->validatePost = false;
या $this->Security->csrfCheck = false;
का उपयोग कर सकते हैं, लेकिन फिर सुरक्षा सुरक्षा प्रदान करने वाली सुरक्षा को खो देते हैं।
सुरक्षा घटक को सामान्य रूप से चालू रखने और काम करने के लिए, आपको AJAX के माध्यम से पोस्ट करने के लिए फ़ॉर्म बनाने के लिए केकेपीएचपी फॉर्म हेल्पर का उपयोग करने की आवश्यकता है। इस तरह data[_Token][fields]
और data[_Token][unlocked]
छिपा क्षेत्रों उनके कुंजी के साथ उत्पन्न हो:
<?php
echo $this->Form->create('Test',array('id'=>'testform'));
echo $this->Form->input('Something');
echo $this->Form->submit();
echo $this->Form->end();
?>
यह कुछ इस तरह उत्पन्न करेगा: यह JQuery में इस फार्म serializing का मामला है
<form action="/your/url" id="testform" method="post" accept-charset="utf-8">
<div style="display:none;">
<input type="hidden" name="_method" value="POST"/>
<input type="hidden" name="data[_Token][key]" value="9704aa0281d8b5a2fcf628e9fe6f6c8410d8f07a" id="Token937294161"/>
</div>
<div class="input text">
<input name="data[Test][Something]" class="required" type="text" id="TestSomething"/>
</div>
<div class="submit">
<input type="submit" />
</div>
<div style="display:none;">
<input type="hidden" name="data[_Token][fields]" value="0c81fda1883cf8f8b8ab39eb15d355eabcfee7a9%3A" id="TokenFields817327064"/>
<input type="hidden" name="data[_Token][unlocked]" value="" id="TokenUnlocked281911782"/>
</div>
</form>
अब इतना है कि यह कर सकते हैं ajax पोस्ट के साथ भेजा:
$('#testform').submit(function(event) {
$.ajax({
type: 'POST',
url: "/your/url",
data: $('#testform').serialize(),
success: function(data){
alert('Wow this actually worked');
},
error:function() {
alert('This will never work');
}
});
event.preventDefault(); // Stops form being submitted in traditional way
});
अब अगर आप सबमिट बटन दबाते हैं, तो पोस्ट सफल होगा।
महत्वपूर्ण: तथ्य यह है कि फार्म सहायक के टोकन केवल सुरक्षा घटक एक बार के साथ इस्तेमाल किया जा सकता के कारण, इस समाधान केवल काम करता है अगर आप केवल पेज पीढ़ी प्रति एक बार पोस्ट करना चाहते हैं। आप एक ही रूप पृष्ठ पुनः लोड के बीच कई बार पोस्ट करने में सक्षम होने की जरूरत है, तो आप जब आप अपने नियंत्रक की शुरुआत में सुरक्षा घटक जोड़ने के लिए निम्न कार्य करना होगा:
public $components = array(
'Security' => array(
'csrfUseOnce' => false
)
);
... इस वसीयत एक से अधिक अनुरोधों के लिए टोकन का उपयोग करने की अनुमति दें। यह सुरक्षित नहीं है लेकिन आप इसे csrfExpires
के साथ जोड़ सकते हैं ताकि टोकन अंततः समाप्त हो जाएंगे। यह सब CSRF configuration section of the Cake book में प्रलेखित है।
मैं इसमें देख रहा हूं और मुझे पूरा यकीन है कि सुरक्षा घटक मुझे यहां रोक रहा है: http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html – kSeudo
ठीक है अगर मैं इसके साथ क्रॉस साइट सुरक्षा अक्षम करता हूं: $ this-> सुरक्षा-> csrfCheck = false; यह काम करता है ..... लेकिन जाहिर है यह जाने का रास्ता नहीं है :) कोई विचार? – kSeudo
क्या आप कोड/usermgmt/users/editUser – Leo