Files
PeerNotes/backend/api/user_login.py

62 lines
2.3 KiB
Python

from api.serializers import LoginSerializer, UserSerializer
from django.contrib.auth import authenticate, get_user_model
from rest_framework import status
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView
def get_client_ip(request):
x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
if x_forwarded_for:
ip = x_forwarded_for.split(",")[0]
else:
ip = request.META.get("REMOTE_ADDR")
return ip
class LoginView(APIView):
def post(self, request):
serializer = LoginSerializer(data=request.data)
if serializer.is_valid():
username = serializer.validated_data["username"]
password = serializer.validated_data["password"]
user = authenticate(username=username, password=password)
if user:
token, _ = Token.objects.get_or_create(user=user)
return Response({"token": token.key})
else:
return Response(
{"error": "Invalid credentials"},
status=status.HTTP_401_UNAUTHORIZED,
)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class SignupView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
print(serializer.validated_data)
username = serializer.validated_data["username"]
email = serializer.validated_data["email"]
password = request.data["password"]
ip_address = get_client_ip(request)
print(email, username, password)
if get_user_model().objects.filter(username=username).exists():
return Response(
{"error": "Username already exists"},
status=status.HTTP_400_BAD_REQUEST,
)
user = get_user_model().objects.create_user(
username=username, email=email, password=password, ip_address=ip_address
)
return Response(
{"message": "User created successfully"}, status=status.HTTP_201_CREATED
)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)