Issue with login endpont for Django REST Framework, The Registration was successful but the login doesn't authenticate, pls check LoginAPIView

Viewed 23

views.py - This is my authentication.views file

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth import authenticate
from authentication.serializers import UserLoginSerializer, UserRegistrationSerializer

class UserRegistrationView(APIView):
    def post(self, request, format=None):
        serializer = UserRegistrationSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            user = serializer.save()
            return Response(
                {"msg": "Registration Successful"}, status=status.HTTP_201_CREATED
            )
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

# The issue I'm having is at this point, all code seems write but still getting errors
class UserLoginView(APIView):
    def post(self, request, format=None):
        serializer = UserLoginSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            email = serializer.data.get('email')
            password = serializer.data.get('password')
            user = authenticate(password=password, email=email)

# This line above and below this comment
            if user is not None:
                return Response({"msg": "Login Successful"}, status=status.HTTP_200_OK)
            else:
                return Response(
                    {
                        "errors": {
                            "non_field_errors": ["Email or Password is not valid"]
                        }
                    },
                    status=status.HTTP_404_NOT_FOUND
                )
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serializers.py - This is my authentication.serializers file

from rest_framework import serializers
from authentication.models import User

# Below are the UserRegistrationSerializer and UserLoginSerializer
class UserRegistrationSerializer(serializers.ModelSerializer):
    password2 = serializers.CharField(style={"input_type": "password"}, write_only=True)
    class Meta:
        model = User
        fields = ["email", "username", "password", "password2"]
        extra_kwargs = {"password": {"write_only": True}}
    def validate(self, attrs):
        password = attrs.get("password")
        password2 = attrs.get("password2")
        if password != password2:
            raise serializers.ValidationError(
                "Password and Confirm Password does not match"
            )
        return attrs
def create(self, validated_data):
    return User.objects.create_user(**validated_data)

class UserLoginSerializer(serializers.ModelSerializer): email = serializers.EmailField(max_length=100) class Meta: model = User fields = ["email", "password"]

urls.py for authenticaion app not root url file

Below is the urls.py file

from django.urls import path
from . views import UserRegistrationView, UserLoginView
urlpatterns = [
    path('register/', UserRegistrationView.as_view(), name="register"),
    path('login/', UserLoginView.as_view(), name="login")
]

Thanks for the review

1 Answers
Related