- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
<分区>
我正在尝试实现用户密码历史记录,以便用户在更新密码时不能使用相同的密码两次。为此,我正在使用 Django 身份验证模块。
为了实现这一点,我只是将用户创建的新密码保存在一个额外的 sql 表 my_userpasswordhistory
中。
之后,我创建了一个新的 PasswordValidator 来对照旧密码检查新密码。我打算这样做的方法是从数据库中的用户那里获取所有旧密码,分离出 salt
并运行 make_password(newpassword, salt)
。
请看下面的代码:
pass_list = UserPasswordHistory.objects.all().filter(user=user)
for old_pass in pass_list:
#split password so we get the hash and the salt
split_pass = old_pass.password.split('$')
salt = split_pass[2]
pw = split_pass[-1]
if make_password(password, salt) == old_pass.password:
raise ValidationError(
_('Your new Password needs to be different from your old one!'),
code='password_identic'
)
问题
我遇到的问题是,不知何故,Django 在管理后端(通过界面)生成的密码与我使用 make_password()
创建的密码不同。
我的密码在数据库中的值为:
从 my_userpasswordhistory 中选择密码;
pbkdf2_sha256$36000$trlHVdErn23Z$BAxX9p3o54QGovIWluP3dM7q73HQNZy9VuYOA6rv268=
但是,在相同的原始密码上使用盐 trlHVdErn23Z
,我得到:
pbkdf2_sha256$36000$trlHVdErn23Z$6WbA/0fUvDi82GjN7lqjdMoaDiaoojGY3A913CGuFBY=
此外,多次运行 make_password()
将始终输出相同的(第二个)密码哈希值。
我无法确定 Django 在管理面板中创建密码时是否使用了一些额外的随机化器,如果我发现了错误,或者更可能是我遗漏了什么。
非常感谢。
我需要在 Django 中以编程方式创建数百(可能数千)个用户。我正在使用类似的东西: from django.contrib.auth.models import User from django.
我尝试手动使用 make_password 和 check_password 函数。在我的一个观点中,我是这样做的(只是出于测试原因): #iteration one: def enter(reque
这个问题在这里已经有了答案: Password string comparison in Django app (2 个答案) 关闭 5 年前。 我正在尝试实现用户密码历史记录,以便用户在更新密码时
我是一名优秀的程序员,十分优秀!