Проблема с конечной точкой входа для Django REST Framework, Регистрация прошла успешно, но логин не проходит аутентификацию, пожалуйста, проверьте LoginAPIView

views.py - Это мой файл authentication.views

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 - Это мой файл authentication.serializers

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 поля = ["email", "password"]

urls.py для приложения authenticaion не является корневым url файлом

Ниже приведен файл urls.py

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")
]

Спасибо за рецензию

После аутентификации необходимо также войти в систему пользователя.

from django.contrib.auth import authenticate, login
user = authenticate(password=password, email=email)
if user:
    login(request, user)

https://docs.djangoproject.com/en/4.1/topics/auth/default/#django.contrib.auth.login

Вернуться на верх