Django simplejwt validate token
Я реализую аутентификацию с помощью Django simpleJwt, и у меня есть вопрос.
Я хочу создать что-то с помощью jwt-токена клиента. Я использую методы, предоставленные в simpleJwt, для проверки и декодирования jwt-токена.
class AccountBookAPIView(APIView):
def post(self, request):
jwt_authenticator = JWTAuthentication()
raw_access_token = request.META.get('access_token')
validated_token = jwt_authenticator.get_validated_token(raw_access_token)
user = jwt_authenticator.get_user(validated_token)
Однако я сомневаюсь, что некоторые методы действительно проверяют токен. Поэтому я проверил реализацию метода. Ниже приведен код для вопроса.
def get_validated_token(self, raw_token):
"""
Validates an encoded JSON web token and returns a validated token
wrapper object.
"""
messages = []
for AuthToken in api_settings.AUTH_TOKEN_CLASSES:
try:
return AuthToken(raw_token)
except TokenError as e:
messages.append(
{
"token_class": AuthToken.__name__,
"token_type": AuthToken.token_type,
"message": e.args[0],
}
)
raise InvalidToken(
{
"detail": _("Given token not valid for any token type"),
"messages": messages,
}
)
# this class is AuthToken in my opinion.
class AccessToken(Token):
token_type = "access"
lifetime = api_settings.ACCESS_TOKEN_LIFETIME
Я не могу найти пункт, который проверяет токен из базы данных. Для меня это выглядит как просто создание токена. Разве мне не нужно проверить токен в базе данных (черный список и невыполненные токены)?
Помогите мне. Любой ответ приветствуется. Ниже представлен мой settings.pyINSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# my apps
'members',
'account_books',
# additional libraries
'rest_framework',
'rest_framework_simplejwt',
'rest_framework_simplejwt.token_blacklist',
]
REST_FRAMEWORK ={
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES':(
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(days=1),
'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
'ROTATE_REFRESH_TOKENS': True,
'BLACKLIST_AFTER_ROTATION': True,
'USER_ID_FIELD' : 'member_id',
}