Я понял это. Вместо пользовательской функции jwt_payload_handler нам нужно установить значение JWT_GET_USER_SECRET_KEY
в файле settings.py. По умолчанию это None, но он принимает функцию, которая принимает пользователя в качестве параметра и возвращает строку uuid. Если не настроено, секретный ключ conf django используется для всех пользователей. Но если установлено, у каждого пользователя будет свой секретный ключ.
При смене пароля также обновите uuid.
в пользовательской модели мы можем установить в какое-то поле:
class TestUser(AbstractBaseUser):
jwt_secret = models.UUIDField(default=uuid.uuid4)
пример функции:
def jwt_get_secret_key(user_model):
return user_model.jwt_secret
в настройках:
JWT_AUTH = {
...
'JWT_GET_USER_SECRET_KEY': 'path.to.jwt_get_secret_key'
...
}
Таким образом, в вашем представлении или сигнале после вызова метода set_password вы можете установить для user.secret_jwt новое значение:
user.secret_jwt = uuid.uuid4()
user.save()
, которое сделает предыдущий запрос недействительным.