Как установить 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');