2017-03-23 8 views
0

djangoの管理者でユーザーのフィールドを変更して保存しようとすると、ハッシュされたパスワードが真のパスワードになります。ハッシュされたパスワードが本物のパスワードになる

パスワードがこのpbkdf2adhfkhadqeqerqfavghhfybのようにハッシュされ、ユーザーモデルの別のフィールドを変更した場合、このハッシュされたパスワードはハッシュされていないパスワードになります。

私のコードは次のとおりです。

class UserCreationForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('Email','name','password','is_staff','is_superuser','Teacher', 
        'Student', 'Data_Joined', 'Is_active') 

    def save(self, commit=True): 
     user = super(UserCreationForm, self).save(commit=False) 
     user.set_password(self.cleaned_data["password"]) 
     if commit: 
      user.save() 
     return user 

class UserAdmin(admin.ModelAdmin): 
    form = UserCreationForm 

admin.site.register(User, UserAdmin) 
+0

私は質問を理解していません。データベースにパスワードハッシュがあると言っていますが、管理ページでレコードを編集すると、何とかパスワードが回復しますか?それは不可能に聞こえる。 – Thilo

+0

はい、それはまさに何が起こっているのですが、私はちょうどこれを解決しました。 – Goun2

答えて

1

私はUserChangeFormデフォルトはフィールドpasswordためReadOnlyPasswordHashFieldを使用しているため、これが発生していると思います。

私がしようとするだろう:

class UserCreationForm(forms.ModelForm): 

    password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput) 

    class Meta: 
     model = User 
     fields = ('Email','name','is_staff','is_superuser','Teacher', 
       'Student', 'Data_Joined', 'Is_active') 

    def save(self, commit=True): 
     user = super(UserCreationForm, self).save(commit=False) 
     user.set_password(self.cleaned_data["password1"]) 
     if commit: 
      user.save() 
    return user