У меня возникает проблема при входе в систему с помощью jwt-токена, я могу получить токен, но возникает проблема, так как аутентификация не предоставлена? В Django из API
У меня возникают некоторые проблемы при регистрации пользователя. Я могу получить соответствующие токены, но не могу аутентифицировать его.
Я получаю ошибку, как показано ниже, и при получении токена тоже.
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.

что вы должны сделать, так это ввести Bearer и токен в headers в части postman, тогда ваш код будет работать просто отлично.
если вы генерируете пользовательский токен, убедитесь, что тип токена - 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


