相关疑难解决方法(0)

AngularJS + Django Rest Framework + CORS(CSRF Coo​​kie未显示在客户端)

我正在使用和Django Rest Framework + Django CORS Headers在AngularJS中开发一个1页的应用程序.

我的问题是,当我联系后端时,"csrftoken"cookie永远不会出现在我的浏览器中.

例如:我正在使用帖子进行登录.我正确地获得了"sessionid"cookie,但是"csrftoken"从未出现,因此我无法从我的客户端发出适当的帖子,因为我因为缺少csrf令牌而被拒绝.

  • 我已经分析了API的响应头,而csrftoken则不然.
  • 我直接在其余的API浏览器中查看,它显示在那里很好.
  • 只是要指出,我可以做我的第一个POST登录,因为Django Rest Framework只强制CSRF用于经过身份验证的用户.如果我尝试重新登录它将失败,因为它出现了"sessionid"-cookie.
  • 我并没有试图绕过CSRF保护,就像stackoverflow上的一些帖子所暗示的那样.

前/后端的一些代码片段.这些是未完成的片段,所以不要挂在写得不好的代码上.

后端API LoginView

class LoginView(APIView):

renderer_classes = (JSONPRenderer, JSONRenderer)

def post(self, request, format=None):
    serializer = LoginSerializer(data=request.DATA)

    if serializer.is_valid():
        userAuth = authenticate(username=serializer.data['username'], password=serializer.data['password'])

        if userAuth:

            if userAuth.is_active:
                login(request, userAuth)

                loggedInUser = AuthUserProfile.objects.get(pk=1)
                serializer = UserProfileSerializer(loggedInUser)

                user = [serializer.data, {'isLogged': True}]



        else:
            user = {'isLogged': False}

        return Response(user, status=status.HTTP_200_OK)

    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

客户端AngularJS登录控制器

.controller('LoginCtrl', ['$scope', '$http', 'uService', '$rootScope', function(scope, $http, User, rootScope) {

scope.login = function() { …
Run Code Online (Sandbox Code Playgroud)

django cors angularjs django-rest-framework django-cors-headers

33
推荐指数
4
解决办法
3万
查看次数