DRF - request.user在从fetch调用api期间登录时返回APIView中的AnonymousUser

时间:2017-12-13 02:28:17

标签: django django-rest-framework fetch

我已经构建了一个APIView:

class CustomAPIView(APIView):
    def get(self, request, *args, **kwargs):
        if not request.user or not request.user.is_authenticated():
            return Response("User not logged in", status=status.HTTP_403_FORBIDDEN)
    # Other stuff

在我的html模板中,我正在使用fetchAPI调用它:

 fetch('/api/request/url/', {method: 'get'})
            .then(
             // Process info );

我已经通过所有这些登录了,但是我总是在APIView返回AnonymousUser中的request.user变量中得到403响应。但是,如果我尝试手动访问api url,一切正常。

有人可以指出我缺少的东西吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

fetch api的问题在于defualt它不会向服务器发送cookie。

  

默认情况下,fetch不会从服务器发送或接收任何cookie,   如果站点依赖,则会导致未经身份验证的请求   维护用户会话(发送cookie,凭证init   必须设置选项)。

所以你必须在你的获取请求中设置凭证:'same-origin',

fetch('/api/request/url/', {method: "GET", credentials: 'same-origin'})
            .then(
             // Process info );

对于跨源请求,请使用credentials: 'include'