Возвращение идентификатора пользователя с JWT

Доброе утро,

Я пишу свой первый DRF API и использую django-rest-framework-jwt ( https://getblimp.github.io/django-rest-framework-jwt/) для обработки аутентификации JWT.

Я использую встроенные представления в настоящее время:

from rest_framework_jwt.views import obtain_jwt_token
from rest_framework_jwt.views import refresh_jwt_token

 urlpatterns = [
    path('auth/obtain_token/', obtain_jwt_token),
    path('auth/refresh_token/', refresh_jwt_token),

но необходимо вернуть некоторую информацию о пользователе обратно в пользовательский интерфейс (VueJS). Я хотел бы сохранить идентификатор пользователя и информацию об имени в хранилище Vuex для передачи в последующие вызовы API и представления пользователю ("Привет, Джим!").

Я обнаружил, что здесь обсуждается добавление пользовательской функции для ответа полезной нагрузки jwt: среда отдыха jwt, возвращающая идентификатор пользователя с токеном

Я не уверен, ГДЕ делать это, хотя...

Спасибо за вашу помощь в разъяснении.

BCBB

1 ответ

Решение

Есть пара решений

1) Прежде всего, идентификатор пользователя кодируется в JWT, вы можете декодировать его в своем js самостоятельно.

2) Вы можете переопределить полезную нагрузку, возвращаемую из django-rest-framework-jwt, следующим образом: поместите следующий код, например, в свой accounts приложение внутри файла с именем utils.py

def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'token': token,
        'username': user.username,
        'user_id' : user.id,
        'email' : user.email
    }

И в rest-framework-jwt настройки заменить

    'JWT_RESPONSE_PAYLOAD_HANDLER':
    'rest_framework_jwt.utils.jwt_response_payload_handler',

С этим

    'JWT_RESPONSE_PAYLOAD_HANDLER':
    'accounts.utils.jwt_response_payload_handler',
Другие вопросы по тегам