mirror of
https://github.com/AmanTahiliani/PeerNotes.git
synced 2026-08-07 19:56:19 -04:00
Added Login and Signup Endpoints within Django
This commit is contained in:
61
backend/api/user_login.py
Normal file
61
backend/api/user_login.py
Normal file
@@ -0,0 +1,61 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user