Как получить элемент по хэшированному полю 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" не делает простого сравнения строк. Вам нужен симметричный алгоритм, я думаю, или простой хэш-алгоритм, для которого будет работать простое сравнение строк

Вернуться на верх