您好,我收到“ CSRF失败且未设置CSRF Coo​​kie”的消息错误

问题描述

{“详细信息”:“ CSRF失败:未设置CSRF cookie。”}邮递员中的错误,我使用django rest_framework开发iOS android后端。

当我第一次清除所有cookie并使用我的登录api时工作正常

enter image description here

这将根据我的代码为我提供有关用户的所有信息,但是在此之后,当我尝试使用post方法访问任何api时,始终会给crsf失败。

enter image description here

我还在view和urls.py中使用csrf_exempt装饰器,还尝试了从括号包中获取CsrfExemptMixin的方法。 我的登录代码

from django.contrib.auth import login,logout
from django.shortcuts import render,redirect
# local py files
from .models import *
from .serializers import *
from app_apis.models import *
# third party
from rest_framework import (generics,permissions)
from knox.views import LoginView as KnoxLoginView
from rest_framework.response import Response
from rest_framework.authtoken.serializers import AuthTokenSerializer
from knox.models import AuthToken
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from braces.views import CsrfExemptMixin
from django.middleware.csrf import get_token
# Register API

class RegisterView(CsrfExemptMixin,generics.GenericAPIView):
    serializer_class=RegisterUserSerializer
    @method_decorator(csrf_exempt)
    def post(self,request,*args,**kwargs):
        serializer=self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        print
        logout(request)
        return Response({
        "user": UserSerializer(user,context=self.get_serializer_context()).data,"token": AuthToken.objects.create(user)[1]
        })


class LoginAPI(CsrfExemptMixin,KnoxLoginView):
    permission_classes = (permissions.AllowAny,)
    def get(self,request):
        example={
    "username":"user_name","password":"Your Password" 
    }
        return Response(example)
    @method_decorator(csrf_exempt)
    def post(self,format=None):
        serializer = AuthTokenSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        user_id_main=user.id
        user_name=user.username
        user_data=[user_id_main,user_name]
        print(user_data)
        projects=ProjectTable.objects.filter(created_by_id=user_id_main).values_list('name')
        project_names=projects
        login(request,user)
        temp_list=super(LoginAPI,self).post(request,format=None)
        temp_list.data["project_list"]=project_names
        temp_list.data["user_data"]=user_data
        temp_list.data['csrf_token']=get_token(request)
        return Response({"data":temp_list.data})

# logout
def logout_view(request):
    logout(request)
    return redirect("user_profile:login")

请引导我。预先感谢

解决方法

请勿在{{1​​}}中使用rest_framework.authentication.SessionAuthentication

参考链接:https://stackoverflow.com/a/56101653/217586