61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
"""
|
|
Authentication views.
|
|
"""
|
|
from django.contrib.auth import authenticate, login, logout, get_user_model
|
|
from rest_framework.decorators import api_view
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from .serializers import UserRegistrationSerializer, UserSerializer, LoginSerializer
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
@api_view(['POST'])
|
|
def register(request):
|
|
"""Register a new user."""
|
|
serializer = UserRegistrationSerializer(data=request.data)
|
|
if serializer.is_valid():
|
|
user = serializer.save()
|
|
return Response({
|
|
'message': 'User created successfully',
|
|
'user': UserSerializer(user).data
|
|
}, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
@api_view(['POST'])
|
|
def user_login(request):
|
|
"""Login user."""
|
|
serializer = LoginSerializer(data=request.data)
|
|
if not serializer.is_valid():
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
username = serializer.validated_data['username']
|
|
password = serializer.validated_data['password']
|
|
|
|
user = authenticate(request, username=username, password=password)
|
|
if user is not None:
|
|
login(request, user)
|
|
return Response({
|
|
'message': 'Login successful',
|
|
'user': UserSerializer(user).data
|
|
})
|
|
|
|
return Response({'error': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
|
|
|
|
|
|
@api_view(['POST'])
|
|
def user_logout(request):
|
|
"""Logout user."""
|
|
logout(request)
|
|
return Response({'message': 'Logout successful'})
|
|
|
|
|
|
@api_view(['GET'])
|
|
def current_user(request):
|
|
"""Get current logged-in user."""
|
|
if request.user.is_authenticated:
|
|
return Response(UserSerializer(request.user).data)
|
|
return Response({'error': 'Not authenticated'}, status=status.HTTP_401_UNAUTHORIZED)
|
|
|