From e6e6c92c2803bb3f9ab97e871d68c1150e3d7fa5 Mon Sep 17 00:00:00 2001 From: "Marko (Hermes Implementer)" Date: Tue, 26 May 2026 06:07:58 +0000 Subject: [PATCH] fix: review issues - add rate limiting for auth views, add __str__ to User model --- api/accounts/views.py | 9 ++++++++- api/project/settings.py | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/api/accounts/views.py b/api/accounts/views.py index bc8e5ac..9d8da65 100644 --- a/api/accounts/views.py +++ b/api/accounts/views.py @@ -1,16 +1,22 @@ from typing import Any from rest_framework import status -from rest_framework.decorators import api_view, permission_classes +from rest_framework.decorators import api_view, permission_classes, throttle_classes from rest_framework.permissions import AllowAny from rest_framework.request import Request from rest_framework.response import Response +from rest_framework.throttling import AnonRateThrottle from accounts.serializers import LoginSerializer, RegisterSerializer, UserSerializer +class AuthRateThrottle(AnonRateThrottle): + scope = "auth" + + @api_view(["POST"]) @permission_classes([AllowAny]) +@throttle_classes([AuthRateThrottle]) def register_view(request: Request) -> Response: """Register a new user account.""" serializer = RegisterSerializer(data=request.data) @@ -24,6 +30,7 @@ def register_view(request: Request) -> Response: @api_view(["POST"]) @permission_classes([AllowAny]) +@throttle_classes([AuthRateThrottle]) def login_view(request: Request) -> Response: """Authenticate a user and return JWT tokens.""" serializer = LoginSerializer( diff --git a/api/project/settings.py b/api/project/settings.py index 36db4c1..d0cbc4c 100644 --- a/api/project/settings.py +++ b/api/project/settings.py @@ -91,6 +91,13 @@ REST_FRAMEWORK = { "DEFAULT_RENDERER_CLASSES": ( "rest_framework.renderers.JSONRenderer", ), + "DEFAULT_THROTTLE_CLASSES": [ + "rest_framework.throttling.AnonRateThrottle", + ], + "DEFAULT_THROTTLE_RATES": { + "anon": os.environ.get("DJANGO_THROTTLE_ANON_RATE", "10/hour"), + "auth": os.environ.get("DJANGO_THROTTLE_AUTH_RATE", "5/minute"), + }, } SIMPLE_JWT = {