【问题标题】:Hashed password becomes the real password哈希密码成为真正的密码
【发布时间】:2017-08-16 17:49:54
【问题描述】:

当我尝试在 django admin 中更改用户字段并保存它时,散列密码最终成为真正的密码。

因此,如果密码像这样 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)

【问题讨论】:

  • 我不明白这个问题。您是说数据库中有密码哈希,当您使用管理页面编辑记录时,密码会以某种方式恢复?这听起来不可能。
  • 是的,这正是发生的事情,但我刚刚解决了这个问题。

标签: python django django-forms django-admin


【解决方案1】:

我认为这是因为UserChangeForm 默认使用ReadOnlyPasswordHashField 字段password

我会尝试:

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

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2023-04-08
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多