Возвращение идентификатора пользователя с 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',