JWT с Django Rest Framework не работает в производстве
Мое приложение использует Django Rest Framework для API и JWT для аутентификации пользователей. Все работало нормально на моей локальной машине. У меня начались проблемы после развертывания на экземпляре EC2.
Единственное, что все еще работает - это вход, регистрация и обновление токенов. То есть, когда я пытаюсь войти, я получаю токены от бэкенда, которые успешно сохраняются в локальном хранилище; когда я пытаюсь зарегистрироваться, бэкенд создает нового пользователя; и время от времени токены также успешно обновляются
Но все остальные вызовы API не работают. Вначале, когда я делал вызов API, я получал ответ "401 Unauthorized".
Я полагаю, что причина была в том, что Apache не пересылал авторизационные заголовки. Поэтому я добавил "WSGIPassAuthorization On" в конфигурацию Apache.
Теперь вместо этого я получаю "500 Internal Server Error".
Как я уже сказал, работают только вызовы API для входа, обновления токенов и регистрации. Для входа и обновления токенов я использую стандартные "TokenObtainPairView" и "TokenRefreshView".
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
urlpatterns = [
path('log-in/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('refresh-token/', TokenRefreshView.as_view(), name='token_refresh'),
]
Для регистрации я использую следующее представление:
class CreateUserAPI(CreateAPIView):
serializer_class = UserSerializer
permission_classes = [AllowAny]
def post(self, request, *args, **kwargs):
user_taken = User.objects.filter(username=request.data['username']).exists()
if user_taken:
return Response({'message': 'username already taken'}, status.HTTP_400_BAD_REQUEST)
email_taken = User.objects.filter(email=request.data['email']).exists()
if email_taken:
return Response({'message': 'email already taken'}, status.HTTP_400_BAD_REQUEST)
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
if user:
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Это один из видов, который не работает:
class DeckApi(viewsets.ViewSet):
permission_classes = [IsAuthenticated]
def list(self, request, *args, **kwargs):
queryset = Deck.objects.filter(user=request.user)
serializer = DeckSerializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
Кто-нибудь знает, в чем может быть проблема?