我想跟踪用户密码更改历史记录,如果以前使用过他们的当前密码,则会显示警告。需要注意的是,我不想阻止用户设置以前使用过的密码,而是想让他们设置密码,而后只显示警告。所以我要寻找的不是密码验证器。
我知道,虽然Django将用户密码保存在数据库中,但它会使用随机盐创建密码的哈希值。因此,两个具有相同密码的哈希将是不同的。仍然可以判断是否使用与输入相同的原始密码创建了两个不同的密码哈希吗?
我想跟踪用户密码更改历史记录,如果以前使用过他们的当前密码,则会显示警告。需要注意的是,我不想阻止用户设置以前使用过的密码,而是想让他们设置密码,而后只显示警告。所以我要寻找的不是密码验证器。
我知道,虽然Django将用户密码保存在数据库中,但它会使用随机盐创建密码的哈希值。因此,两个具有相同密码的哈希将是不同的。仍然可以判断是否使用与输入相同的原始密码创建了两个不同的密码哈希吗?
如果您无权访问纯文本密码,而您拥有的只是散列,则您无法在它们之间进行任何比较。这样做是为了使密码不可逆,尤其是密码的整个数据库不可逆。如果有足够的时间和计算能力,您也许可以强行使用一个密码,但是您无法将该知识应用于其他任何哈希,因此,将整个密码数据库强行强制使用的代价是非常高的。
您可以在用户输入普通密码后进行注册,登录或重置密码时进行此类比较。那时,您只需要将密码与现有密码进行哈希运算,然后比较哈希即可。
,我不知道,我是否正确理解了您的情况。 这是根据您对问题的理解得出的解决方案。 您可以使用与Django中的User模型相关联的check_password()方法将新密码与已使用的密码进行比较。
@api_view(['POST'])
def some_function(request):
new_password = request.data.get('password')
# get the user from the request
user_object = request.user
if user_object.check_password(new_password):
# check_password() will hash the new_password in the same way how it hashed the password which is already stored in the db and it will compare the new_password with that password.
print("Both the passwords are same")
else:
print("Passwords are not same")
如果请求未通过身份验证,则无法从请求中获取用户。在这种情况下,此代码将不起作用。
希望它将为您的问题提供解决方案。