我正在制作一个自定义重置密码模块。我正在使用django auth用户模型检查旧密码。但是check_password总是返回false。如果我的逻辑有误,请提供帮助。
views.py
def user_pass_change(request):
pass_old = request.POST.get('old_pass')
hash_pass_new = make_password(request.POST.get('new_pass'))
username = request.POST.get('username')
user = User.objects.get(username=username)
if user:
check = check_password(user.password,pass_old)
if check:
User.objects.filter(username=username).update(password=hash_pass_new)
messages.success(request, 'Password changed !')
return redirect('/login')
else:
messages.warning(request, 'Wrong old password')
return redirect('/login')
else:
messages.warning(request, 'Invalid Username !')
return redirect('/login')
我尝试将这些哈希表包含在setting.py中
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
'django.contrib.auth.hashers.BCryptPasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.Argon2PasswordHasher',
]
预先感谢
答案 0 :(得分:1)
user.password
是密码的哈希值,而不是实际的密码。 check_password
需要一个原始字符串。 [Django Docs]
要检查当前密码是否与pass_old
相同,可以执行以下操作:
check = user.check_password(pass_old) # user is the User object