我在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中的密码为纯文本,它可以工作。如何使用散列密码进行身份验证。
答案 0 :(得分:1)
您可以使用django check_password
提供的名为check_password(raw_password)
的功能
如果给定的原始字符串是用户的正确密码,则返回True。 (这会在进行比较时处理密码哈希)