Как переопределить 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)