Учетные записи REST API SIMPLE JWT не возвращают имя пользователя в http://127.0.0.1:8000/api/auth/jwt/.
Я изучаю Djago REST API и в настоящее время хочу понять, как успешно запустить приложение для счетов в рамках проекта.
Я использую учебник, который использует JWT старой версии, которая не поддерживает Django +2, поэтому я использую Simple JWT. Так вот, Simple JWT и старая версия совсем не похожи на то, что объясняет тутор и вряд ли можно найти в новой версии. Я был бы признателен, если бы вы объяснили, что мне нужно сделать. Я хочу, чтобы в моем http://127.0.0.1:8000/api/auth/jwt/ возвращалось user
после того, как я введу свое имя пользователя и пароль, однако он возвращает только "access" и "refresh"
в моем project/accounts/utils.py
: (код ниже из учебника, однако он не поддерживается Simple JWT)
from django.conf import settings
from django.utils import timzone
def jwt_response_payload_hadler(token,user=None,request=None):
return {
'token':token,
'user': user.username,
}
в моем проекте настройки у меня есть: (взято из нового Simple JWT)
from datetime import timedelta
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_FILTER_BACKENDS':(
'rest_framework.filters.SearchFilter',
'rest_framework.filters.OrderingFilter',
),
'SEARCH_PARAM':'search',
'ORDERING_PARAM':'ordering',
}
JWT_AUTH = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS': False,
'BLACKLIST_AFTER_ROTATION': False,
'UPDATE_LAST_LOGIN': False,
# 'JWK_URL': None,
'AUTH_HEADER_TYPES': ('Bearer',),
'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
'USER_ID_FIELD': 'id',
'USER_ID_CLAIM': 'user_id',
'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
'TOKEN_TYPE_CLAIM': 'token_type',
'JTI_CLAIM': 'jti',
'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}
в старом JWT, который наставник использует в настройках:
'JWT_RESPONSE_PAYLOAD_HANDLER':
'accounts.api.utils.jwt_response_payload_handler'
Однако он не поддерживается Simple JWT, поэтому я не включил его в свои настройки. Что может быть альтернативой этому? Как я могу достичь приведенного ниже примера?
Token Obtain Pair
Takes a set of user credentials and returns an access and refresh JSON web token pair to prove the authentication of those credentials.
POST /api/auth/jwt/
HTTP 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Vary: Accept
{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY0MTY1MjMxOCwiaWF0IjoxNjQxNTY1OTE4LCJqdGkiOiIzMWJlYzBkNTJlMTU0YzM4YWExNTU3YWE4ZGM4ZDRlNSIsInVzZXJfaWQiOjF9.DlHtn6eiVYsMu-voZHFvoxMf6950hVKlF7JEUpmL9qg",
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjQxNTY2MjE4LCJpYXQiOjE2NDE1NjU5MTgsImp0aSI6ImE3MjMxNjgyNGZlYTQ2YmRhNDk3ZDM3OWRiM2NlODNkIiwidXNlcl9pZCI6MX0.JVDrbH1I2tMvP0c_phPRG_Nk8NcRVbLXpwR0uP9jE9I",
"user": "lulu"
}