Проблемы с аутентификацией пользователей в Python

Я создаю приложение django/react и испытываю проблемы с аутентификацией пользователей бэкэнда, не смог отладить проблему.

После успешного создания учетной записи я пытаюсь войти в систему. Вот маршрут входа, который я построил.

@csrf_exempt
@api_view(['POST'])
def loginUser(request):
    data = request.data
    if request.method == 'POST':
        email = data['email']
        password = data['password']

        try:
            user = User.objects.get(email=email)
        except:
            message = {'detail': 'email does not match a user'}
            return Response(message, status=status.HTTP_400_BAD_REQUEST)

    username = user.username
    user = authenticate(request, username=username, password=password)
    
    # Returning correct username and password
    print('This is the username:', username)
    print('This is the password:', password)

    # returning None, even though username and password are matching the info used for signup. (confirmed on admin page)
    print('This is the user:', user)

    

    if user is not None:
        login(request, user)
        serializer = UserSerializer(user, many=False)
        message = {'detail': 'user has been logged in'}
        return Response(serializer.data)
    else:
        message = {'detail': 'Username or password is incorrect'}
        return Response(message, status=status.HTTP_400_BAD_REQUEST)

Любая помощь будет очень признательна, так как я застрял на этом уже 2 дня.

Возможно, это связано с Try-Except или с тем, что вы используете email вместо имени пользователя (но я не думаю, что это имеет значение). Вы можете попробовать что-то вроде этого:

from django.contrib.auth import authenticate
from django.contrib.auth.models import auth

def loginUser(request):
    if request.method == 'POST':
        username = request.POST['name']
        password = request.POST['password']

        user = authenticate(request, username=username, password=password)

        if user is not None:
            auth.login(request, user)
            return redirect('index')
        else:
            messages.info(request, 'Invalid Username or Password')
            return redirect('login')
    else:
        return render(request, 'login.html')

Надеюсь, это поможет.

Если вы используете этот код, а проблема все еще сохраняется, это может быть связано с тем, что ваш шаблон или урлы могут быть неправильными.

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