Index: backend/auth_form/urls.py
===================================================================
--- backend/auth_form/urls.py	(revision 2dcd2e90570e37b58c5c237905918997562016a4)
+++ backend/auth_form/urls.py	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
@@ -1,4 +1,4 @@
 from django.urls import path
-from .views import RegisterView, LoginView, StudentFormView, UserDetailView
+from .views import RegisterView, LoginView, StudentFormView, UserDetailView, LogoutView
 from rest_framework_simplejwt.views import TokenObtainPairView
 from .serializers import CustomTokenObtainPairSerializer
@@ -8,4 +8,5 @@
     path('register/', RegisterView.as_view(), name='register'),
     path('login/', TokenObtainPairView.as_view(serializer_class=CustomTokenObtainPairSerializer), name='token_obtain_pair'),
+    path('logout/', LogoutView.as_view(), name='auth_logout'),
     path('refresh/', TokenRefreshView.as_view(), name='token_refresh'),
     path('form/', StudentFormView.as_view(), name="student_form"),
Index: backend/auth_form/views.py
===================================================================
--- backend/auth_form/views.py	(revision 2dcd2e90570e37b58c5c237905918997562016a4)
+++ backend/auth_form/views.py	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
@@ -52,4 +52,19 @@
         }, status=status.HTTP_200_OK)
 
+class LogoutView(APIView):
+    permission_classes = (IsAuthenticated,)
+
+    def post(self, request):
+        try:
+            refresh_token = request.data["refresh"]
+            token = RefreshToken(refresh_token)
+            token.blacklist()
+
+            # 205 Reset Content is a good choice for a successful logout
+            # as it tells the client to reset its view.
+            return Response(status=status.HTTP_205_RESET_CONTENT)
+        except Exception as e:
+            return Response(status=status.HTTP_400_BAD_REQUEST)
+        
 class StudentFormView(APIView):
     def get_permissions(self):
Index: frontend/src/context/AuthProvider.tsx
===================================================================
--- frontend/src/context/AuthProvider.tsx	(revision 2dcd2e90570e37b58c5c237905918997562016a4)
+++ frontend/src/context/AuthProvider.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
@@ -86,10 +86,41 @@
 	}, []);
 
-	const logout = () => {
+	const logout = async () => {
+		const refreshToken = localStorage.getItem("refresh");
+
+		if (refreshToken) {
+			try {
+				const response = await fetch("http://localhost:8000/auth/logout/", {
+					method: "POST",
+					headers: {
+						"Content-Type": "application/json",
+						Authorization: `Bearer ${localStorage.getItem("access")}`,
+					},
+					body: JSON.stringify({
+						refresh: refreshToken,
+					}),
+				});
+
+				if (response.ok) {
+					console.log("Successfully logged out on the server.");
+				} else {
+					console.error(
+						"Server logout failed:",
+						response.status,
+						response.statusText
+					);
+				}
+			} catch (error) {
+				console.error("An error occurred during logout:", error);
+			}
+		}
+
 		if (proactiveRefreshTimeoutId.current) {
 			clearTimeout(proactiveRefreshTimeoutId.current);
 		}
+
 		localStorage.removeItem("access");
 		localStorage.removeItem("refresh");
+
 		setAccessToken(null);
 		setRefreshToken(null);
