我正在为新用户使用Bcrypt_SHA256,但是我必须导入的旧系统中有一些使用PBKDF_SHA256的用户帐户。根据{{3}},密码应该在登录时升级。
我有自定义身份验证功能,当我在旧帐户上调用它时,密码无法升级?
@classmethod
def authenticate(cls, app, email, password):
app_user = cls.find_by_email(app, email)
# User not found
if not app_user:
return
# User found but password incorrect
if not hashers.check_password(password, app_user.password):
app_user.failed_logins_count += 1
app_user.save()
return
# Failed login count should be reset to 0 on successful login
app_user.failed_logins_count = 0
app_user.save()
return app_user
以下是我的设置:
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.SHA1PasswordHasher',
'django.contrib.auth.hashers.MD5PasswordHasher',
'django.contrib.auth.hashers.CryptPasswordHasher',
)
用户正确返回,但密码无法更改。由于我的自定义功能,我是否需要手动升级密码,因为文档不清楚,或者是其他错误?
答案 0 :(得分:2)
那是因为你在没有setter
参数的情况下调用hashers.check_password
。
为什么不直接在User
个实例上调用app_user.check_password
?它将为您插入setter
。