Как переопределить user.check_password(password)

Мне нужно переопределить метод user.check_password(password), потому что я использую старую базу данных, которая использует пароли, хэшированные с помощью .net framework. Я создал функцию, которая может хэшировать пароль и сравнивать его с хэш-паролем, который уже сохранен в базе данных.

мой вопрос в том, как я могу переопределить функцию check_password и когда я использую ее с моей функцией, она будет возвращать True

Я не знаю, будет ли это работать в данном случае, но если вы хотите перезаписать метод класса, вы можете сделать это следующим образом :

class test:
    def a(self):
        print("ok")

t = test()

Вы получаете

t.a() #-> ok

Но вы можете перезаписать его с помощью

t.a = lambda *args:print("Redirected")
t.a() #-> Redirected

Не уверен, что это сработает в вашем случае.

вам следует попробовать что-то вроде

user.check_password = lambda *args:True

Но, возможно, эта функция задает какие-то другие параметры внутри экземпляра. Это страхует только то, что для данного экземпляра функция check_password является функцией, которая возвращает True.

я нашел решение это было очень просто

я использовал системную функцию Django для поддержания работы админ-панели, в то же время я использовал свою собственную функцию (hash_validation)

from django.contrib.auth.hashers import check_password

# you have to put this function in your Model Class
 def check_password(self,password):
        if hash_validation(password=password, passHash=self.password):
            return True
        else:
            def setter(password):
                self.set_password(password)
                # Password hash upgrades shouldn't be considered password changes.
                self._password = None
                self.save(update_fields=["password"])
            return check_password(password, self.password, setter)
Вернуться на верх