Django - 在验证之前修改密码哈希

时间:2017-11-03 13:53:56

标签: python django django-models

我正在尝试使用遗留,只读DB作为django.contrib.auth.models.AbstractBaseUser。问题是我的旧密码字段是SHA1而没有启动' sha1 $$' string,只是hash,所以我需要在每个密码上附加额外的字符串。

models.py

class Tuzytkownik(AbstractBaseUser):
    login = models.CharField(db_column='LOGIN', max_length=50, unique=True)
    haslo = models.CharField(db_column='HASLO', max_length=50)
    password = 'sha1$$' + haslo
    USERNAME_FIELD = 'login'
    REQUIRED_FIELDS = []

显然

  

密码=' sha1 $$' + haslo

不工作。我怎么能搞这个?

要成为specyfic - haslo returing 40charts hash like

  

' cf23df2207d99a74fbe169e3eba035e633b65d94'

我需要的是

  

' SHA1 $$ cf23df2207d99a74fbe169e3eba035e633b65d94'

1 个答案:

答案 0 :(得分:0)

您可以通过覆盖AbstractBaseUser.set_password()方法(source)来完成此操作:

from django.contrib.auth.hashers import check_password

class Tuzytkownik(AbstractBaseUser):

    def check_password(self, raw_password):
        # prepend the sha prefix before passing the hashed password to the hash checker
        return check_password(raw_password, 'sha1$$' + self.password)