Кросс-оригинальный запрос заблокирован и префлайт выполняется Просмотр Django-project

В моем проекте Django и React я пытаюсь сделать запрос на регистрацию, который не выполняется из-за отсутствия заголовка "Access-Control-Allow-Origin", что приводит к ошибке 504. Проблема, с которой, как мне кажется, я столкнулся, заключается в том, что предварительный запрос (OPTIONS) уже выполняет View, что вызывает проблемы с разрешениями для последующего POST-запроса.

Jan 21 10:11:20 AllKids python3[155868]: [21/Jan/2023 09:11:20] "OPTIONS /user/register/ HTTP/1.0" 200 0
Jan 21 10:11:20 AllKids python3[155868]: in View

Я не уверен, почему эта проблема возникает только на этом представлении, поскольку все остальные представления работают правильно.

Jan 21 10:21:40 AllKids python3[156001]: [21/Jan/2023 09:21:40] "POST /user/validatePassword/ HTTP/1.0" 200 613

Стоит отметить, что запрос OPTIONS возвращает код состояния 200. Я хотел бы поделиться с вами следующим кодом для дальнейшего анализа:

   let formData = {
      password: password,
      username: username,
      email: email,
    };
    console.log(formData);
    let request = await fetch(
      `${process.env.REACT_APP_BACKEND_URL}/user/register/`,
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(formData),
      }
    );
    console.log(response, 'WTF');
    let response = await request.json();

Строка "WTF" не достигается, так как я не получаю ответа... Для сравнения, вот функция, которая работает совершенно нормально (вход в систему):

let formData = { password: password, email: email };
let request = await fetch(
  `${process.env.REACT_APP_BACKEND_URL}/user/validatePassword/`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(formData),
  }
);
let response = await request.json();

вот мои настройки django:

INSTALLED_APPS = [
     ...
    "corsheaders",
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]


CORS_ORIGIN_ALLOW_ALL = True

вот представление, которое выполняется на запросе preflight:

@api_view(["POST"])
def registerUser(request):
    print("In Function")
    body = returnContent(request)
    try:
        CustomUser.objects.get(email=body["email"])
        return Response("Email already in use!")
    except:
        if len(body["username"]) < 4:
            return Response("Username should be at least 3 characters long.")
        if body["username"][0].isdigit():
            return Response("Username should not start with a digit.")
        if len(body["password"]) < 7:
            return Response("Password must be at least 6 characters")
        randomToken = random.randrange(100000, 999999)
        user = CustomUser.objects.create_user(
            username=body["username"], email=body["email"], password=body["password"], currentVerificationToken=randomToken)
        sendEmailVerification(
            user.username, user.currentVerificationToken, user.email)
        user = CustomUserLoggedSerializer(user, many=False)
        return Response(user.data)

и это будет запрос на вход, где все работает просто отлично...:

@api_view(["POST"])
def validatePassword(request):
    body = returnContent(request)
    try:
        password = body["password"]
        email = body["email"]
    except:
        return Response("No Email or Password provided")

    try:
        user = CustomUser.objects.get(email=email)
    except:
        return Response("Invalid email")
    user = authenticate(request, email=email, password=password)
    if user is not None:

        if user.twoFactorVerification:
            setattr(user, "currentVerificationToken",
                    random.randrange(100000, 999999))
            user.save()
            sendEmailVerification(
                user.username, user.currentVerificationToken, user.email)
            return Response("Two-Factor Authentication Required")

        login(request, user)
        user = CustomUserLoggedSerializer(user, many=False)
        return Response(user.data)
    else:
        return Response(False)
Вернуться на верх