आप cakePHP पासवर्ड सत्यापन के साथ सड़क के नीचे एक और समस्या में पड़ सकता है।
समस्या यह है कि केक हैश पासवर्ड पहले, तो सत्यापन करता है, जो आपके नियमों के अनुसार मान्य होने पर भी इनपुट विफल हो सकता है। यही कारण है कि पासवर्ड सामान्य के बजाय इनपुट फ़ील्ड में वापस लौटा दिया जाता है।
बजाय विशेष क्षेत्र का नाम 'पासवर्ड' का उपयोग करने का इसे ठीक, 'tmp_pass' की तरह एक अलग नाम का उपयोग करें। इस तरह, केकेपीएचपी ऑथ स्वचालित रूप से मैदान को हश नहीं करेगा।
यहां नमूने के रूप
echo $form->create('Vendor', array('action' => 'register'));
echo $form->input('email');
echo $form->input('tmp_pass', array('label' => 'Password','type'=>'password'));
echo $form->end('Register');
आपके वेंडर मॉडल में है, के बजाय 'tmp_pass' के लिए इन नियमों आवंटित 'पासवर्ड' के लिए सत्यापन नियमों असाइन नहीं करते उदाहरण के लिए
var $validate = array('email' => 'email', 'password' => ... password rules...);
var $validate = array('email' => 'email', 'tmp_pass' => ... password rules...);
अंत में, अपने विक्रेता मॉडल में, पहले सेव() लागू करें।
सबसे पहले, देखें कि डेटा मान्य है ('tmp_pass' आपके नियमों के विरुद्ध मान्य होगा)।
सफल होने पर, मैन्युअल रूप से हैश tmp_pass और इसे $-> डेटा ['विक्रेता'] ['पासवर्ड'] में डाल दें और फिर सत्य लौटाएं। असफल होने पर, झूठी वापसी करें।
function beforeSave() {
if($this->validates()){
$this->data['Vendor']['password'] = sha1(Configure::read('Security.salt') . $this->data['User']['tmp_pass']);
return true;
}
else
return false;
}
+1 - यह मेरे लिए बहुत उपयोगी था, हालांकि मैं उचित 'एथ-> पासवर्ड()' या 'एथ-> हैशपैसवर्ड()' फ़ंक्शंस का उपयोग करने का सुझाव देना चाहता हूं खुद को सलाम और खुद को धोने से। – nickf
आपको ** sha1' के साथ अपना पासवर्ड नहीं होना चाहिए, क्योंकि यह ** ** 'एथ' (यदि आप इसका उपयोग कर रहे हैं) के साथ असंगतताएं पेश कर सकते हैं तो सड़क को पासवर्ड से नीचे रखता है। इसके बजाय '$ this-> ऑथ-> पासवर्ड()' का उपयोग करें! – deceze
@deceze, स्रोत को देखते हुए, 'Auth :: हैशपैसवर्ड() 'उपयोगकर्ता :: हैशपैसवर्ड()' फ़ंक्शन को परिभाषित किए जाने पर कॉल करेगा, जबकि 'Auth :: password()' नहीं है। – nickf