Django启用密码hasher进行自定义身份验证

时间:2016-05-09 07:21:41

标签: python django authentication

我在django项目中使用自定义身份验证后端。 我使用django shell创建了一个用户。现在,当我输入密码并尝试使用authenticate方法对其进行身份验证时,它将返回None。

我发现它与密码哈希有关。

存储在数据库中的密码类似于pbkdf2_sha256$24000$c0t.....

我想知道如何在django中使用哈希?

Settings.py:

AUTHENTICATION_BACKENDS = ('login_app.backends.LoginBackend',
                        'django.contrib.auth.backends.ModelBackend')

# Password validation
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

自定义后端:

def authenticate(self, email=None, password=None):
    try:
        user = User.objects.get(email=email)
        if password == user.password:
            return user
        else:
            return None
    except User.DoesNotExist:
        return None

编辑:如果我手工编辑postgres中的密码为纯文本,它可以工作。如何使用散列密码进行身份验证。

1 个答案:

答案 0 :(得分:1)

您可以使用django check_password提供的名为check_password(raw_password)的功能 如果给定的原始字符串是用户的正确密码,则返回True。 (这会在进行比较时处理密码哈希)