为什么在 Set-Cookie header 字段中找不到 CSRF 令牌?
why CSRF token is not found in Set-Cookie header field?
我有一个 Django Rest-framework APIView class,如下所示:
class HelloView(APIView):
def get(self, request):
clients = client.objects.all()
serializer = ClientSerializerAPIView(clients, many=True)
return Response(serializer.data)
def post(self, request):
serializer = ClientSerializerAPIView(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_404_NOT_FOUND)
当我通过邮递员发送获取请求时,邮递员的 cookie 部分中有一个 csrf 令牌,但问题是我收到的 header 文件中没有 Set-Cookie 字段从.
克 csrftoken
这是在 cookie 中而不是在 header 中,您应该在 header 中发送 X-CSRFToken
键。
您必须使用 ensure_csrf_cookie
:
装饰您的视图
from django.views.decorators.csrf import ensure_csrf_cookie
from django.utils.decorators import method_decorator
@method_decorator(ensure_csrf_cookie, name='dispatch')
class MyView(APIView):
...
您还可以发送有效的 csrf 令牌作为 django.middleware.csrf.get_token(request)
收到的响应
并进行相应设置。
我有一个 Django Rest-framework APIView class,如下所示:
class HelloView(APIView):
def get(self, request):
clients = client.objects.all()
serializer = ClientSerializerAPIView(clients, many=True)
return Response(serializer.data)
def post(self, request):
serializer = ClientSerializerAPIView(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_404_NOT_FOUND)
当我通过邮递员发送获取请求时,邮递员的 cookie 部分中有一个 csrf 令牌,但问题是我收到的 header 文件中没有 Set-Cookie 字段从.
克 csrftoken这是在 cookie 中而不是在 header 中,您应该在 header 中发送 X-CSRFToken
键。
您必须使用 ensure_csrf_cookie
:
from django.views.decorators.csrf import ensure_csrf_cookie
from django.utils.decorators import method_decorator
@method_decorator(ensure_csrf_cookie, name='dispatch')
class MyView(APIView):
...
您还可以发送有效的 csrf 令牌作为 django.middleware.csrf.get_token(request)
收到的响应
并进行相应设置。