NextJs не устанавливает cookie из django csrf_token
Мое приложение nextjs, интегрированное с django, имеет систему аутентификации, основанную на csrftoken и sessionid. Когда приложение nextjs запускается, оно делает запрос к бэкенду для маршрута csrf, который автоматически устанавливает cookie в место назначения запроса. Обычно это работает при локальном запуске. Но при запуске nextjs в docker в производственной среде можно увидеть, что cookie устанавливается в заголовках ответа, но на самом деле cookie не создается. Я установил CSRF_COOKIE_SAMESITE = None и SESSION_COOKIE_SAMESITE = None. Но куки все равно не устанавливаются, даже в заголовках показывается, что куки установлены
XHRGET
https://api.viajahturismo.com.br/api/v1/csrf/
[HTTP/2 204 23ms]
csrftoken
expires "2025-03-09T00:38:39.000Z"
path "/"
samesite "None"
value "8UayLGpyXUF0cc2AlM5zqBd4kdOHSfXf"
csrftoken "8UayLGpyXUF0cc2AlM5zqBd4kdOHSfXf"
Мои настройки django:
Мои настройки nginx в производстве:
upstream lito_upstream {
# ip_hash;
server viajah-api:8000;
server front_viajah:3000;
}
server {
location / {
proxy_pass http://viajah-api:8000/;
}
listen 8000;
server_name viajah-api;
}
#server
server {
#Defines the port on which the server will listen for requests.
include /etc/nginx/mime.types;
location /media/ {
autoindex on;
alias /app/media/;
}
location / {
proxy_set_header Host $host;
proxy_pass http://front_viajah:3000;
}
listen 3000;
server_name front_viajah;
Мой взгляд на получение csrf
class get_csrf(APIView):
authentication_classes = [SessionAuthentication]
permission_classes = [AllowAny]
@method_decorator(ensure_csrf_cookie)
def get(self, request, *args, **kwargs) -> Response:
return Response(status=status.HTTP_204_NO_CONTENT)
Ps: На localhost и при локальном запуске docker все работает отлично, cookie устанавливается нормально, и я могу выполнять другие запросы, которые зависят от csrfToken и sessionID. Но в моем продакшене на VPS сервере с Docker, который тянет образы из docker hub, подталкиваемый действиями gh, не работает
Пожалуйста, если кто-то может помочь мне, я не имею ни малейшего представления о том, что происходит
Проблема была в том, что мне пришлось добавить CSRF_COOKIE_DOMAIN
и SESSION_COOKIE_DOMAIN
опцию acept my domain, вы должны добавить домен без https://. Если вы не добавите эти две опции, django установит host only для cookies, что позволит использовать cookies только для api домена.