Django没有升级密码

时间:2015-03-27 08:49:40

标签: django

我正在为新用户使用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',
)

用户正确返回,但密码无法更改。由于我的自定义功能,我是否需要手动升级密码,因为文档不清楚,或者是其他错误?

1 个答案:

答案 0 :(得分:2)

那是因为你在没有setter参数的情况下调用hashers.check_password

为什么不直接在User个实例上调用app_user.check_password?它将为您插入setter