Django सादे-पाठ के रूप में पासवर्ड की दुकान नहीं है। यह पहले उन्हें धो देता है और वे हैश स्टोर करता है। तो जब उपयोगकर्ता लॉग इन करता है, तो Django उपयोगकर्ताओं के इनपुट में एक ही हैश फ़ंक्शन लागू करता है और फिर दो हैंश की तुलना करता है - उपयोगकर्ताओं के इनपुट से और डीबी में संग्रहीत किया जाता है।
हालांकि बातें और अधिक लचीला बनाने के लिए, जैंगो पासवर्ड हैश की दुकान नहीं है, अच्छा किया है, लेकिन इसके अलावा, यह भी एल्गोरिथ्म है जिसके द्वारा हैश उत्पन्न की गई संग्रहीत करता है। इस परिदृश्य की कल्पना करें - पासवर्ड हैश उत्पन्न करने के लिए हैश फ़ंक्शन X
का उपयोग करें, लेकिन फिर आप महसूस करते हैं कि यह फ़ंक्शन किसी भी कारण से सुरक्षित नहीं है और आप हैशिंग फ़ंक्शन Y
पर स्विच करते हैं। हालांकि यह एक समस्या है क्योंकि बिंदु पर, जो भी पासवर्ड हैश फ़ंक्शन X
का उपयोग करके संग्रहीत किया जाता है, वे अब लॉगिन नहीं कर पाएंगे। यही कारण है कि Django भी हैश मूल्य के अलावा, जिस तरह से उत्पन्न किया गया था, उस विधि को संग्रहीत करता है। यह वह जगह है जहां PASSWORD_HASHERS
सेटिंग आती है। तथ्य यह है कि डीजेगो उस विधि को संग्रहीत करता है जिसके द्वारा डीबी में हैश उत्पन्न होता है, जब मूल्य पढ़ते हैं, तो यह वास्तव में डैंजो को यह नहीं बताता है कि हैश फ़ंक्शन को कैसे कार्यान्वित किया जाए। तो PASSWORD_HASHERS
हैशिंग पायथन फ़ंक्शन (वास्तव में एक वर्ग लेकिन वैसे भी ...) और डीबी में संग्रहीत मान के बीच एक मैपर की तरह है।
तो अपने प्रश्न के लिए वापस। त्रुटि संदेश का अर्थ है कि Django हैशिंग समारोह password
जो PASSWORD_HASHERS
में अपने डेटाबेस में पासवर्ड के हैश स्टोर करने के लिए इस्तेमाल किया गया था, या कम से कम अपनी नहीं के बारे में पता नहीं है।
मैं कारण है कि हो सकता है की जोड़ी के बारे में सोच सकते हैं।
सुनिश्चित करें कि फिर तुम syncdb
करते हैं, यह के रूप में जब आप व्यवस्थापक तक पहुँचने के लिए सर्वर चला रहे हैं एक ही settings.py
फ़ाइल का उपयोग करता है सुनिश्चित करें। यह मामला हो सकता है कि विभिन्न सेटिंग्स का उपयोग किया जाता है।
हालांकि डेवलपर आमतौर पर PASSWORD_HASHERS
को settings.py
में संशोधित नहीं करते हैं और केवल डिफ़ॉल्ट मान का उपयोग करते हैं। उस स्थिति में, सुनिश्चित करें कि आप उसी पाइथन का उपयोग Django के उसी स्थापित संस्करण के साथ कर रहे हैं जब आप syncdb
करते हैं और जब आप सर्वर चलाते हैं। आप एक virtualenv, उदाहरण के लिए, और विभिन्न env में रन सर्वर में syncdb
करते हैं, तो Django संस्करणों अलग हो सकता है, इसलिए वे PASSWORD_HASHERS
लिए भिन्न सेटिंग हो सकता है और इसलिए जहां syncdb
चलाने के लिए, यह एक हैशिंग समारोह जो नहीं है का उपयोग कर किया जा सकता है जब आप सर्वर चलाते हैं तो परिभाषित किया जाता है।
आप https://docs.djangoproject.com/en/1.4/topics/auth/#how-django-stores-passwords पर कैसे Django भंडार पासवर्ड के बारे में और अधिक पढ़ या एक पाने के लिए पूरे पृष्ठ पढ़ सकते हैं Django ऑथ कैसे काम करता है, इसकी बेहतर समझ, जिसमें उपयोगकर्ता प्रमाणीकरण शामिल है। – miki725