Запрещено (403) Проверка CSRF не удалась. Запрос прерван. с Google OAuth2

У меня есть следующие архивы из моего приложения на React и бэкенда на django: У меня есть следующие файлы из моего фронтенд-приложения на React и бэкенда на django:

// Router.jsx
import { createBrowserRouter, Navigate, RouterProvider } from 'react-router-dom'
import { useEffect } from 'react'
import { Home } from '@pages/Home'
import { Error } from '@pages/Error'
import { NotFound } from '@pages/NotFound'

export const Router = () => {
  const google = window.google

  const handleCallbackResponse = (response) => {
    console.log(response)
    const authorizationCode = response.credential
    if (authorizationCode) {
      console.log('Authorization code:', authorizationCode)
      fetch('http://localhost:8000/auth/google/', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ code: authorizationCode })
      })
        .then(response => {
          if (!response.ok) {
            throw new Error('Network response was not ok')
          }
          return response.json()
        })
        .then(data => {
          console.log('Response from Django backend:', data)
        })
        .catch(error => {
          console.error('There was an error with the fetch operation:', error)
        })
    }
  }

  useEffect(() => {
    google.accounts.id.initialize({
      client_id: 'No la pongo por seguridad',
      callback: handleCallbackResponse
    })

    google.accounts.id.renderButton(document.getElementById('signInButton'), {
      theme: 'outline',
      size: 'large'
    })
  }, [])

  const router = createBrowserRouter([
    {
      path: '/',
      element: <Navigate to='/home' />,
      errorElement: <Error />
    },
    {
      path: '/home',
      element: <Home />,
      errorElement: <Error />
    },
    {
      path: '*',
      element: <NotFound />
    }
  ])

  return (
    <>
      <RouterProvider router={router} />
    </>
  )
}
# views.py
from django.http import JsonResponse
import requests
def google_auth_callback(request):
    if request.method == 'POST':
        authorization_code = request.POST.get('code')
        google_token_endpoint = 'https://accounts.google.com/o/oauth2/'
        google_client_id = ''
        google_client_secret = ''
        redirect_uri = 'http://localhost'
        token_data = {
            'code': authorization_code,
            'client_id': google_client_id,
            'client_secret': google_client_secret,
            'redirect_uri': redirect_uri,
            'grant_type': 'authorization_code',
        }
        try:
            response = requests.post(google_token_endpoint, data=token_data)
            response.raise_for_status()
            google_response_data = response.json()
            access_token = google_response_data.get('access_token')
            return JsonResponse({'access_token': access_token}, status=200)
        except requests.exceptions.RequestException as e:
            return JsonResponse({'error': str(e)}, status=500)
    else:
        return JsonResponse({'error': 'Only POST requests are allowed'}, status=405)

Soy principiante en ambas tecnologias y si alguien ve algo mal en mi codigo ademas de mi error que me esta dando el "Forbidden (403) CSRF verification failed. Request aborted." no he visto mucho material del tema de auth con Google y la mayoria del material que hay es poco seguro o ya esta deprecado. Я новичок в обеих технологиях, и если кто-то видит что-то не так в моем коде, кроме моей ошибки, он дает мне "Forbidden (403) CSRF verification failed. Запрос прерван". Я не видел много материалов на тему аутентификации с помощью Google, а большинство из тех, что есть, не очень безопасны или уже устарели.

He probado inclusive cambiar de la manera en la que renderizo el boton, poner una statment para ignorar los tokens (me dio otro error), y en general he echo de todo tipo de soluciones y ninguna me ha funcionado porque como digo todo el contenido de esto ya esta deprecado. El google client id y google client secret no los coloco por seguridad pero en mi app si estan puestos. Я даже пробовал изменить способ отображения кнопки, вставить утверждение, чтобы игнорировать токены (это дало мне еще одну ошибку), и вообще я пробовал всевозможные решения, и ни одно из них не сработало, потому что, как я уже сказал, все содержимое This уже устарело. Я не задаю Google Client ID и Google Client Secret из соображений безопасности, но они заданы в моем приложении.

Для каждого обработчика, который получает данные

from django.views.decorators.csrf import csrf_exempt


@csrf_exempt
def google_auth_callback(request):
    ...
Вернуться на верх