Как установить CSRF cookie в nextjs для django

Я новичок в Nextjs и работаю над фронтендом для моего Django приложения

вот мой route.js, который вызывает конечную точку django

import { NextResponse  } from 'next/server';
import axios from 'axios';
//import { cookies } from 'next/headers';

export async function POST(req: Request) {
  const { imageData } = req.body;
  try {

    //Django backend

    const response = await axios.post(
      'http://localhost:8000/souci/capture/', 
      { imageData }
    );

    return NextResponse.json({response});
  } catch (error) {
    console.error('Error sending image data to Django:', error);
    return NextResponse.json({ success: false, error: 'Failed to send image data to Django' });
  }
}

export async function GET(req: Request) {
  //return
}

В настоящее время я получаю эту ошибку в консоли Django

WARNING:django.security.csrf:Forbidden (CSRF cookie not set.): /souci/capture/
[20/Feb/2024 04:55:44] "POST /souci/capture/ HTTP/1.1" 403 2870

Как установить csrftoken в функции POST?

Я пробовал несколько вещей, включая настройки axios defaults

axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN"

создание cookie (хотя не уверен, как добавить это в POST-запрос)

cookies().set('csrftoken', 'souci', {
  maxAge: 60 * 60 * 24, //one day in seconds
  httpOnly: true, // prevent client-side access
  sameSite: 'strict',
});

Вы можете создать csrf_token с помощью этой функции Javascript

function getToken(name) {
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        const cookies = document.cookie.split(';');
        for (let i = 0; i < cookies.length; i++) {
            const cookie = cookies[i].trim();
            
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

const csrftoken = getToken('csrftoken');
Вернуться на верх