दिलचस्प पोस्ट
जावास्क्रिप्ट – वर्तमान तिथि से सप्ताह का पहला दिन प्राप्त करें कैसे एक runnable जार फ़ाइल बनाने के लिए? जावास्क्रिप्ट छवि यूआरएल सत्यापित करें व्यावसायिक दिनों की गणना करें किटकैट 4.4.2 संस्करण के साथ एसडीकार्ड पर "EACCES अनुमति अस्वीकृत" से बचने के लिए। Google से नई नीति MobileWiFi.framework का उपयोग और उपयोग करना एक नेस्टेड क्लास टेम्प्लेट का आंशिक स्पेशलाइजेशन क्यों अनुमत है, जबकि पूरा नहीं है? XML का उपयोग करके एक कस्टम एंड्रॉयड UI तत्व घोषित करना Python pip एक पुस्तकालय निर्देशिका और एक निर्देशिका शामिल निर्दिष्ट करें Asp.net में डिफ़ॉल्ट पृष्ठ सेट करें एक सरल कमांड लाइन कार्यक्रम या बैकअप एसक्यूएल सर्वर डेटाबेस स्क्रिप्ट क्या है? मेरा पीडीओ वक्तव्य काम नहीं करता है एएनएसआई बनाम बनाम "जहां खंड" मिलते हैं जावा इंटरफेस में वैकल्पिक तरीके स्ट्रिंग को PHP में पूर्णांक बदलने का सबसे तेज़ तरीका

Django मॉडल में पासवर्ड फ़ील्ड

मैं एक मॉडल बनाने की कोशिश कर रहा हूं जहां मैं अन्य अनुप्रयोगों के लिए उपयोगकर्ता नाम और पासवर्ड संग्रहीत कर सकता हूं। मैं Django में पासवर्ड फ़ील्ड कैसे सेट कर सकता हूं ताकि यह व्यवस्थापक में सादा पाठ में न हो? अग्रिम में धन्यवाद।

Solutions Collecting From Web of "Django मॉडल में पासवर्ड फ़ील्ड"

@ मिलिसेनर ने auth को सुझाव दिया था । auth.User मॉडल देखने का एक अच्छा स्थान है। यदि आप स्रोत कोड की जांच करते हैं तो आप देखेंगे कि password फ़ील्ड एक CharField

 password = models.CharField(_('password'), max_length=128, help_text=_("Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>.")) 

User मॉडल में एक set_password विधि भी है

 def set_password(self, raw_password): import random algo = 'sha1' salt = get_hexdigest(algo, str(random.random()), str(random.random()))[:5] hsh = get_hexdigest(algo, salt, raw_password) self.password = '%s$%s$%s' % (algo, salt, hsh) 

आप पासवर्ड बनाने और उसे सहेजने के बारे में इस विधि से कुछ सुराग ले सकते हैं।

दुर्भाग्य से इस सवाल का आसान जवाब नहीं है क्योंकि यह उन एप्लिकेशनों पर निर्भर करता है जिनके खिलाफ आप प्रमाणित करने का प्रयास कर रहे हैं और यह भी इस बात पर निर्भर करता है कि पासवर्ड फ़ील्ड कैसे होना चाहिए।

अगर आपका डीजेंगो आवेदन पासवर्ड का उपयोग दूसरे प्रोग्राम के लिए प्रमाणित करने के लिए किया जायेगा जिसके लिए पाठ करने के लिए एक सादा पाठ की आवश्यकता होती है, तो आपके विकल्प इस प्रकार हैं:

  • अपने डीजेंगो मॉडल में सादा पाठ में पासवर्ड को स्टोर करें (आपका सवाल यह दर्शाता है कि आप ऐसा नहीं करना चाहते)
  • अन्य अनुप्रयोगों के लिए अपने संग्रहीत पासवर्ड को अनलॉक करने से पहले उपयोगकर्ता से एक मास्टर पासवर्ड को कैप्चर करें
  • मॉडल में पासवर्ड को अवगत कराएं ताकि इसे किसी भी व्यक्ति द्वारा कच्चे डेटास्टोर अनुमतियों तक पहुंचा जा सके, लेकिन यह सिर्फ मानव आकस्मिक दर्शकों के लिए स्पष्ट नहीं है

आप Django उपयोगकर्ता पासवर्ड को मास्टर पासवर्ड के रूप में इस्तेमाल कर सकते हैं यदि आप Django के निर्मित उपयोगकर्ता मॉडल का उपयोग कर रहे हैं। इसका मतलब है कि आपको स्मृति में उस मास्टर पासवर्ड को रखने की आवश्यकता होगी जो आपके लिए कुछ कार्रवाइयां मुश्किल कर सकती है, जैसे कि सर्वर को पुनरारंभ करना या भार-संतुलित अनावश्यक सर्वरों को चलाने के लिए

पासवर्ड संग्रह करने के लिए वैकल्पिक

सौभाग्य से कई आधुनिक अनुप्रयोग इस तरह से पासवर्ड के बजाय आधारित कुंजी का उपयोग कर एक अभिगम टोकन सिस्टम का उपयोग करके दूसरे तरीके से इसका समर्थन करते हैं। उपयोगकर्ताओं को दो अनुप्रयोगों के बीच एक लिंक स्थापित करने की प्रक्रिया के माध्यम से निर्देशित किया जाता है और, पर्दे के पीछे, अनुप्रयोग एक दूसरे को या तो स्थायी रूप से प्रमाणित करने के लिए या परिभाषित समाप्ति तिथि के साथ कुंजी उत्पन्न करता है

फेसबुक, उदाहरण के लिए, इस मॉडल का समर्थन करता है और उनके पास विस्तृत दस्तावेज हैं कि यह कैसे काम करता है:

फेसबुक डेवलपर्स: एक्सेस टोकन और प्रकार

एक बार जब आप [OAuth 2.0] (http://tools.ietf.org/html/draft-ietf-oauth-v2- 12) का उपयोग करके फेसबुक के साथ लिंक करने में कामयाब हो गए हैं, तो संभवतः आपको अन्य एप्लिकेशन के लिंक जोड़ना आसान होगा एक ही प्रोटोकॉल

आपकी सबसे अच्छी शर्त (मुझे पता है) कोड को डीजेंगो कोड में खोदना है, और देखें कि यह कैसे किया जाता है। जैसे मुझे याद है, वे एक नमकीन हैश उत्पन्न करते हैं ताकि सादे पाठ मूल्य कहीं भी जमा न हो जाएं, बल्कि हैश और नमक भी हैं।

यदि आप डीजेंगो अधिष्ठापन में जाते हैं, और हैश और नमक जैसे शब्दों के लिए चारों ओर प्रहार करते हैं, तो आपको इसे जल्दी से मिलना चाहिए अस्पष्ट जवाब के लिए क्षमा करें, लेकिन शायद यह आपको सही रास्ते पर सेट करेगा।

मुझे नहीं लगता कि आप कभी भी डी-हैश को एक एन्क्रिप्टेड पासवर्ड सक्षम करने जा रहे हैं जो सामान्य डीजेंगो उपयोगकर्ता पासवर्ड के समान तरीके से संग्रहीत किया गया था। सुरक्षा का एक हिस्सा यह है कि वे संयुक्त राष्ट्र के-

यदि आपको प्रतिवर्ती पासवर्ड फ़ील्ड की आवश्यकता है, तो आप इस तरह से कुछ का उपयोग कर सकते हैं:

 from django.db import models from django.core.exceptions import ValidationError from django.conf import settings from os import urandom from base64 import b64encode, b64decode from Crypto.Cipher import ARC4 from django import forms PREFIX = u'\u2620' class EncryptedCharField(models.CharField): __metaclass__ = models.SubfieldBase SALT_SIZE = 8 def __init__(self, *args, **kwargs): self.widget = forms.TextInput super(EncryptedCharField, self).__init__(*args, **kwargs) def get_internal_type(self): return 'TextField' def to_python(self, value): if not value: return None if isinstance(value, basestring): if value.startswith(PREFIXO_CRYPTO): return self.decrypt(value) else: return value else: raise ValidationError(u'Failed to encrypt %s.' % value) def get_db_prep_value(self, value, connection, prepared=False): return self.encrypt(value) def value_to_string(self, instance): encriptado = getattr(instance, self.name) return self.decrypt(encriptado) if encriptado else None @staticmethod def encrypt(plaintext): plaintext = unicode(plaintext) salt = urandom(EncryptedCharField.SALT_SIZE) arc4 = ARC4.new(salt + settings.SECRET_KEY) plaintext = u"%3d%s%s" % (len(plaintext), plaintext, b64encode(urandom(256-len(plaintext)))) return PREFIX + u"%s$%s" % (b64encode(salt), b64encode(arc4.encrypt(plaintext.encode('utf-8-sig')))) @staticmethod def decrypt(ciphertext): salt, ciphertext = map(b64decode, ciphertext[1:].split('$')) arc4 = ARC4.new(salt + settings.SECRET_KEY) plaintext = arc4.decrypt(ciphertext).decode('utf-8-sig') return plaintext[3:3+int(plaintext[:3].strip())] 

एन्क्रिप्शन भाग https://djangosnippets.org/snippets/1330/ पर स्निपेट पर आधारित है, मैं इसे एक फ़ील्ड मॉडल में बदल दिया, यूटीएफ -8 समर्थन जोड़ा गया और डीजींगो के मूर्खतापूर्ण उपयोग के लिए एपाइथन के लिए एक कामकाज के रूप में एक उपसर्ग जोड़ा ( )