Подтвердить что ты не робот

Где я могу переопределить метод jwt_response_payload_handler?

Я установил JWT с пипсом. Теперь я хочу переопределить метод

def jwt_response_payload_handler(token, user=None, request=None):
    return { 'token': token, }

быть

def jwt_response_payload_handler(token, user=None):
    return {
        'token': token,
        'user': UserSerializer(user).data
    }

Где я должен его переопределить? Я переопределяю метод в своем приложении, но где и как? или изменить исходный код в библиотеке?

Я изменил метод в библиотеке, и он отлично работает, но я не думаю, что это правильный способ сделать. Кто-нибудь может мне помочь? Благодаря

4b9b3361

Ответ 1

Как только вы создадите свой собственный метод обработчика, вам придется изменить его в настройке JWT_AUTH. Просмотрите раздел Дополнительные настройки в документах.

Ответ 2

Я нашел успех, выполнив следующее:

Файл myapp.view.py:

def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'token': token,
        'bunny': 'fu fu'
    }

файл settings.py:

JWT_AUTH = {
    'JWT_RESPONSE_PAYLOAD_HANDLER':
    #'rest_framework_jwt.utils.jwt_response_payload_handler',
    'myapp.views.jwt_response_payload_handler',
}

Реализация функции jwt_response_payload_handler в произвольном месте, но убедитесь, что она находится в вашем пути python. Например, в этом файле: myapp.views.py

Затем в файле settings.py обновите ключ словаря JWT_AUTH jwt_response_payload_handler с новым местоположением созданного jwt_response_payload_handler.

Как только вы поймете, что происходит, вы можете адаптировать решение так, как хотите. Например, я бы не рекомендовал оставлять переопределенную функцию в файле views.py. Это было просто проще для демонстрации целей.

Возможно, размещение функции jwt_response_payload_handler в созданном вами файле "helper.py" будет простым решением.

Ответ 3

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)