Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 0 additions & 30 deletions forum/investors/migrations/0001_initial.py

This file was deleted.

23 changes: 0 additions & 23 deletions forum/investors/migrations/0002_initial.py

This file was deleted.

32 changes: 0 additions & 32 deletions forum/projects/migrations/0001_initial.py

This file was deleted.

22 changes: 0 additions & 22 deletions forum/projects/migrations/0002_initial.py

This file was deleted.

44 changes: 0 additions & 44 deletions forum/users/migrations/0001_initial.py

This file was deleted.

22 changes: 21 additions & 1 deletion forum/users/serializers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from rest_framework import serializers
from django.contrib.auth.password_validation import validate_password
from .models import User
from rest_framework_simplejwt.tokens import RefreshToken, TokenError

class UserRegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(
Expand Down Expand Up @@ -31,4 +32,23 @@ def create(self, validated_data):
class UserResponseSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email', 'user_name']
fields = ['email', 'user_name']



class LogoutSerializer(serializers.Serializer):
refresh = serializers.CharField()

default_error_messages = {
"bad_token": "Incorrect or already revoked token."
}

def validate(self, attrs):
self.token = attrs["refresh"]
return attrs

def save(self, **kwargs):
try:
RefreshToken(self.token).blacklist()
except TokenError:
self.fail("bad_token")
3 changes: 2 additions & 1 deletion forum/users/urls.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

from .views import RegisterView
from .views import RegisterView, LogoutView

urlpatterns = [
path('register/', RegisterView.as_view(), name='register'),
path('login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path("logout/", LogoutView.as_view(), name="auth_logout"),
]
15 changes: 14 additions & 1 deletion forum/users/views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import UserRegisterSerializer
from .serializers import UserRegisterSerializer,LogoutSerializer
import logging
from rest_framework.permissions import IsAuthenticated


logger = logging.getLogger(__name__)

Expand All @@ -18,3 +20,14 @@ def post(self, request):

logger.warning(f"User registration failed. Errors: {serializer.errors}")
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)



class LogoutView(APIView):
permission_classes = [IsAuthenticated]

def post(self, request):
serializer = LogoutSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response({"detail": "Logout successful."}, status=status.HTTP_204_NO_CONTENT)