Как получить элемент по хэшированному полю CharField в django
У меня есть модель Device
, в которой есть поле token
, хранящее хэшированную строку pbkdf2_sha256.
from django.contrib.auth.hashers import make_password
from django.models import Model, CharField
class Device(Model):
name = CharField(max_length=200)
token = CharField(unique=True, max_length=128)
def save(self,*args,**kwargs):
self.token = make_password(self.token)
super().save(*args,**kwargs)
Например, у меня есть объект Device, токен которого имеет хэшированное значение ABCD
. Теперь вопрос заключается в том, что если я получу ABCD
от пользователя как необработанный токен, как я могу найти его устройство из базы данных? Я пробовал следующее:
Я хэшировал ABCD
, полученное от пользователя, на make_password
, но новое хэшированное значение не совпадало со старым, которое было в db.
также я знаю, что могу получить id устройства от пользователя и затем проверить, совпадает ли введенный пользователем токен с методом check_password
. но я хочу получить только токен от пользователя, а не id устройства и токен.
Я не думаю, что "pbkdf2_sha256" является подходящим алгоритмом для этого случая, так как даже для проверки правильности пароля "check_password" не делает простого сравнения строк. Вам нужен симметричный алгоритм, я думаю, или простой хэш-алгоритм, для которого будет работать простое сравнение строк