मेरा लक्ष्य ओवरराइड बस प्रत्येक उपयोगकर्ता के लिए Configure::read('Security.salt')
उपयोग करने के बजाय प्रत्येक उपयोगकर्ता के लिए एक अनूठा नमक है।CakePHP 2: AuthComponent के "पासवर्ड" विधि
मुझे पता है कि CakePHP 2.x नहीं रह गया है स्वचालित रूप से पासवर्ड हैश। यह मुझे पासवर्ड पर मॉडल सत्यापन करने की अनुमति देता है, जो बहुत अच्छा है। हालांकि, मुझे कोई तरीका नहीं दिख रहा है कि मैं AuthComponent की "पासवर्ड" विधि को ओवरराइड कर सकता हूं। इसलिए मैं डेटाबेस पर सहेजे जाने से पहले पासवर्ड कैसे नियंत्रित कर सकता हूं, इस पर नियंत्रण कर सकता हूं, लेकिन मैं वास्तविक लॉगिन करने के दौरान पासवर्ड को कैसे नियंत्रित कर सकता हूं, इस पर नियंत्रण नहीं कर सकता। रसोई की किताब से:
आप
$this->Auth->login()
कॉल करने से पहले पासवर्ड हैश करने के लिए जरूरत नहीं है।
$this->Auth->login()
पासवर्ड हैशिंग की एक कस्टम विधि का उपयोग करने के लिए मैं क्या कर सकता हूं?
धन्यवाद।
अद्यतन: मैं डॉ हनिबाल लेक्टर के उत्तर (कस्टम प्रमाणीकरण ऑब्जेक्ट बनाने) के साथ जा रहा हूं। यहां इसका तरीका बताया गया है:
पुराने कोड:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
नए कोड (परिवर्तन "प्रपत्र" के लिए "कस्टम"):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
बनाएँ "अनुप्रयोग/नियंत्रक/घटक/प्रमाणीकरण/CustomAuthenticate.php "और यह इस तरह दिखने:
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class CustomAuthenticate extends FormAuthenticate {
}
कॉपी" _findUser "और" _password lib/केक/नियंत्रक/कॉम "से विधियां" पोनेंट/एथ/बेसएट प्रमाणीकरण.एफ़पी "और उन्हें" कस्टम प्रमाणीकरण "कक्षा में पेस्ट करें। if (empty($result) || empty($result[$model])) {
if (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {
को
फिर बनाने $model . '.' . $fields['password'] => $this->_password($password),
बदलें:
"$ की स्थिति" सरणी से इस लाइन निकालें: फिर "_findUser" विधि के लिए निम्न दो संशोधन करने "_password" विधि के लिए निम्न दो संशोधनों:
बदलकर
protected function _password($password) {
protected function _password($password, $id) {
कोअद्यतन नमक मान बदलकर "$ आईडी" पैरामीटर बनाएं
return Security::hash($password, null, true);
return Security::hash($password, null, Configure::read('Security.salt') . $id);
को
अन्त में, के रूप में ही तर्क के साथ
Security::hash
उपयोग करने के लिएAuthComponent::password
की सभी घटनाओं को अद्यतन ऊपर।
यह काम करता है! मैंने प्रासंगिक प्रश्न के साथ अपना प्रश्न अपडेट किया। धन्यवाद! – Nick