2013-03-20 34 views
15
  • अजगर 3
  • Django 1.5
  • PostgreSQL 5.0.3

मैं Django को & मुझे लगता है कि का उपयोग करता है एक Django अनुप्रयोग बना रही हूँ नया हूँ सार उपयोगकर्ता, लेकिन जब मैं Django व्यवस्थापक में कोई उपयोगकर्ता बनाता हूं, और फिर व्यवस्थापक में उपयोगकर्ता की जानकारी को देखता हूं, तो मुझे सादा पाठ में पासवर्ड दिखाई देता है। डीबी में सीधे जांच कर, मुझे लगता है कि पासवर्ड निश्चित रूप से सादे टेक्स्ट के रूप में संग्रहीत किया जा रहा है।Django व्यवस्थापक नहीं हैशिंग कस्टम उपयोगकर्ता पासवर्ड

मैं कुछ प्रमाणीकरण करने के लिए कुछ विचार लिखने की कोशिश कर रहा हूं, लेकिन यह उपयोगकर्ता नाम और पासवर्ड सही होने पर भी काम नहीं कर रहा है। तो मुझे लगता है कि authenticate() फ़ंक्शन हैशिंग है लेकिन None देता है क्योंकि पासवर्ड वास्तव में धोया नहीं जाता है।

क्या कोई संभावित कारण है कि पासवर्ड धोया नहीं जा रहा है?

मैं कुछ कोड पोस्ट करूंगा, लेकिन मुझे नहीं लगता कि कोई भी कोड मदद करेगा, क्योंकि मेरे मॉडल में पासवर्ड फ़ील्ड के साथ कुछ भी कोड शामिल नहीं है (जो & जेंजो द्वारा किया गया है)। अगर ऐसा कुछ है जो मैं कर रहा हूं या नहीं कर रहा हूं, तो मुझे यह भी पता नहीं होगा कि कोड का कौन सा हिस्सा होगा, इसलिए मुझे अपनी सेटिंग्स, मॉडल, व्यवस्थापक इत्यादि से सब कुछ पोस्ट करना होगा।

उत्तर

2

क्योंकि यह सीधे डेटाबेस में सहेजता है। तो इसे सहेजने से पहले आपको पासवर्ड को हश करने के लिए विधि को ओवरराइड करना होगा। इसे अपने फॉर्म में जोड़ें:

def save(self, commit=True): 
    # Save the provided password in hashed format 
    user = super(MyForm, self).save(commit=False) 
    user.set_password(self.cleaned_data["password"]) 
    if commit: 
     user.save() 
    return user 
+0

मैं किसी भी रूपों नहीं किया है (मैं Django के व्यवस्थापक द्वारा उत्पन्न उपयोग कर रहा हूँ), तो मैं काफी समझ में नहीं आता, जहां मेरे रूप है। क्या मैं इसे अपने admin.py में डालूं? – Zamphatta

+0

नहीं, यह अलग फ़ाइल में होना चाहिए, इसे form.py के रूप में नाम दें – catherine

8

आप admin.py फ़ाइल में फॉर्म कोड जोड़ सकते हैं। हालांकि, आपको फॉर्म क्लास की परिभाषा भी जोड़नी होगी, न कि केवल सेव() विधि और उपयोगकर्ता एडमिन अवरोही वर्ग की परिभाषा भी। मुझे लगता है कि उदाहरण स्पष्ट होगा:

class UserCreationForm(forms.ModelForm): 
    class Meta: 
     model = CustomUser 
     fields = ('email',) 

    def save(self, commit=True): 
     # Save the provided password in hashed format 
     user = super(UserCreationForm, self).save(commit=False) 
     user.set_password(self.cleaned_data["password"]) 
     if commit: 
      user.save() 
     return user 


class CustomUserAdmin(UserAdmin): 
    # The forms to add and change user instances 
    add_form = UserCreationForm 
    list_display = ("email",) 
    ordering = ("email",) 

    fieldsets = (
     (None, {'fields': ('email', 'password', 'first_name', 'last_name')}), 
     ) 
    add_fieldsets = (
     (None, { 
      'classes': ('wide',), 
      'fields': ('email', 'password', 'first_name', 'last_name', 'is_superuser', 'is_staff', 'is_active')} 
      ), 
     ) 

    filter_horizontal =() 

    admin.site.register(CustomUser, CustomUserAdmin) 

यह आपको प्रारंभ करना चाहिए। आपको अपने उपयोगकर्ता वर्ग के फ़ील्ड से मेल खाने के लिए कक्षाओं के फ़ील्ड को कस्टमाइज़ करना होगा।

अधिक जानकारी यहाँ है: https://docs.djangoproject.com/en/dev/topics/auth/customizing/

8

मुझे लगता है कि समस्या यह है कि आप अपने admin.py में django.contrib.auth.admin से ModelAdmin बजाय UserAdmin विरासत में मिला है।

नमूना कोड:

from django.contrib.auth.admin import UserAdmin 
from .models import Employee 

class EmployeeAdmin(UserAdmin): 
    pass 

admin.site.register(Employee, EmployeeAdmin) 
संबंधित मुद्दे