У меня возникает проблема при входе в систему с помощью jwt-токена, я могу получить токен, но возникает проблема, так как аутентификация не предоставлена? В Django из API

У меня возникают некоторые проблемы при регистрации пользователя. Я могу получить соответствующие токены, но не могу аутентифицировать его.

enter image description here

Я получаю ошибку, как показано ниже, и при получении токена тоже.

enter image description here

HTTP 401 Unauthorized

Allow: GET, HEAD, OPTIONS

Content-Type: application/json

Vary: Accept

WWW-Authenticate: JWT realm="api"
{

    "detail": "Authentication credentials were not provided."
}

В set.py

INSTALLED_APPS = [

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'webapi.apps.WebapiConfig',
    'corsheaders',
    'rest_framework',
    'ratings',
    # 'rest_framework.authtoken',
    'rest_framework_simplejwt',
    'rest_framework_simplejwt.token_blacklist',
    'rest_auth',
    'phone_field',
    'phonenumber_field',
    'djoser',
    'users.apps.UsersConfig',
]

REST_FRAMEWORK = {

    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.AllowAny',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}

SIMPLE_JWT = {

    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'UPDATE_LAST_LOGIN': False,

    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUDIENCE': None,
    'ISSUER': None,
    'JWK_URL': None,
    'LEEWAY': 0,

    'AUTH_HEADER_TYPES': ('JWT',),
    '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),
}

В urls.py

from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
    TokenVerifyView,
)

urlpatterns = [

    path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('token/verify/', TokenVerifyView.as_view(), name='token_verify'),
]

Вы должны включить аутентификацию сессии django

Это то, что используют шаблоны по умолчанию django Rest framework.

🦋 Бабочка 🦋

если вы используете postman, вам не следует вставлять токен в секцию params. enter image description here

что вы должны сделать, так это ввести Bearer и токен в headers в части postman, тогда ваш код будет работать просто отлично.

enter image description here

если вы генерируете пользовательский токен, убедитесь, что тип токена - access, код будет выглядеть следующим образом:

from rest_framework_simplejwt.tokens import RefreshToken

def get_tokens_for_user(user):
    token= RefreshToken.for_user(user)

    return {
        'refresh': str(token),
        'access': str(token.access_token),
    }

если вы не получили ответ, проверьте документацию: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html

Вернуться на верх