Логин не устанавливает sessionid в Cookies в браузере Safari с onrender.com [Django]

Я развернул Django в качестве бэкенда на render.com, я настроил csrf и правила сессии на settings.py вот так.

SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

SESSION_ENGINE = "django.contrib.sessions.backends.db"
SESSION_COOKIE_AGE = 1209600  # 2 weeks
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = "None"
SESSION_COOKIE_HTTPONLY = True

CSRF_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = "None"
CSRF_TRUSTED_ORIGINS = [
    "http://localhost:5173",
    config("LOCAL_SERVER"),
    config("FRONTEND_URL"),
    config("BACKEND_URL"),
]

Сервер даже ответил статусом 200, но пользователь не хранится в cookies, поэтому на самом деле он не вошел в систему. Я попытался войти в систему в браузере Brave, и это сработало. Но проблема существует в Safari и мобильных браузерах. В чем может быть проблема?

Это метод входа в систему в Django.

@csrf_protect
@api_view(["POST"])
@permission_classes([AllowAny])
def login_view(request):
    username = request.data.get("username")
    password = request.data.get("password")
    user = authenticate(username=username, password=password)

    if user is not None:
        login(request, user)
        csrf_token = get_token(request)

        if request.data.get("favorites") or request.data.get("cart"):
            request.user = user
            # Call sync function with the cookie data
            sync_user_data(request)
        response = JsonResponse({"message": "Login success"}, status=status.HTTP_200_OK)
        response.set_cookie(
            "sessionid",
            request.session.session_key,
            httponly=True,
            secure=True,
            samesite="None",
            domain=config("ALLOWED_HOST_BACKEND"),
            max_age=1209600,
        )
        response.set_cookie("csrftoken", csrf_token, httponly=True)
        return response
    else:
        return JsonResponse(
            {"message": "Invalid credentials"}, status=status.HTTP_400_BAD_REQUEST
        )

Это функция входа в систему, вызывающая Backend API,

const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    try {
      const response = await axiosInstance.post(
        "/auth/login/",
        {
          username,
          password,
        },
        {
          headers: {
            "X-CSRFToken": csrfToken,
          },
        }
      );

      if (response.status === 200) {
        alert("Login successful!");
        // reload the page after login
        window.location.reload();
      }
    } catch (err) {
      console.error("Login error:", err);
      setError("Invalid username or password.");
    }
  };
Вернуться на верх