Ответ
Проверка JWT-токенов в Django, особенно при использовании Django REST Framework (DRF), реализуется через классы аутентификации (Authentication Classes). Самым популярным решением является библиотека djangorestframework-simplejwt.
Механизм работает следующим образом:
- Настройка аутентификации: Класс аутентификации указывается для конкретного
Viewили глобально в настройках проекта. - Извлечение токена: При каждом запросе класс аутентификации пытается извлечь токен из заголовка
Authorization: Bearer <token>. - Валидация: Если токен найден, он декодируется и проверяется его подпись, срок действия (
exp) и другие поля. - Аутентификация пользователя: В случае успеха в объект
requestдобавляетсяrequest.user, и доступ разрешается.
Пример с djangorestframework-simplejwt:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
class ProtectedDataView(APIView):
# Указываем, что для этого View нужно использовать JWT-аутентификацию
authentication_classes = [JWTAuthentication]
# Требуем, чтобы пользователь был аутентифицирован
permission_classes = [IsAuthenticated]
def get(self, request):
# Благодаря успешной аутентификации, здесь доступен request.user
return Response({"message": f"Hello, {request.user.username}! This is protected data."})
Для применения проверки ко всему проекту, JWTAuthentication добавляется в settings.py:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
} Ответ 18+ 🔞
А, ну слушай, про проверку JWT-токенов в Django, особенно когда ты с DRF возишься. Это ж классика, блядь! Все эти распиздяи, которые пытаются без аутентификации к защищённым данным пролезть — им сразу пизда, нахуй.
Вот смотри, вся магия, блядь, крутится вокруг классов аутентификации, ёпта. И все, как один, идут в библиотеку djangorestframework-simplejwt. Ну а че, она простая, как три копейки, и работает, как швейцарские часы, если их, конечно, не обоссать.
Как этот цирк, блядь, работает:
- Настраиваешь аутентификацию. Ты говоришь своему вьюхе или всему проекту: "Слушай сюда, мудила, вот этот класс — твой новый отец. Он будет решать, кто свой, а кто левый".
- Вытаскиваешь токен. При каждом запросе этот класс-отец лезет в заголовки, ищет строчку
Authorization: Bearer <token>. Если её нет — сразу подозрение, блядь, чувствую. - Проверяешь на вшивость. Нашёл токен? Отлично. Теперь его надо расшифровать, проверить подпись, не протух ли он (это поле
exp), и вообще, не мухлюют ли с ним. Если что-то не так — волнение, ебать, терпения ноль, доступ закрыт. - Подключаешь юзера. Если всё чисто — в объект
requestподкидываетсяrequest.user. И всё, чувак, ты в домике, можешь работать.
Вот тебе живой пример, смотри:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
class ProtectedDataView(APIView):
# Говорим вьюхе: "Запомни, твой вышибала — вот этот мужик с JWT"
authentication_classes = [JWTAuthentication]
# И добавляем: "Пускать только тех, кого вышибала пропустит"
permission_classes = [IsAuthenticated]
def get(self, request):
# А тут уже всё ок, request.user на месте, можно здороваться
return Response({"message": f"Hello, {request.user.username}! This is protected data."})
А если ты, сука, ленивая жопа и не хочешь на каждом вьюхе это прописывать, можно накрыть весь проект медным тазом одной настройкой в settings.py:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}
Вот и вся философия. Поставил вышибалу — и спи спокойно. Лезут левые — получают по ебалу токеном. Красота, блядь!