Django中的check_password()总是返回false

时间:2020-05-22 16:55:33

标签: python django django-authentication

我正在制作一个自定义重置密码模块。我正在使用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',
]

预先感谢

1 个答案:

答案 0 :(得分:1)

user.password是密码的哈希值,而不是实际的密码。 check_password需要一个原始字符串。 [Django Docs]

要检查当前密码是否与pass_old相同,可以执行以下操作:

check = user.check_password(pass_old) # user is the User object