首页 > 解决方案 > Fetch API 会导致 Django 中的 CSRF 错误,但不会导致 cURL?

问题描述

我遇到了一个非常奇怪的错误,其中 fetch API(在 React-Native 项目中)导致 CSRF 错误,但 cURL 不会导致相同的错误。这是值得注意的代码:

获取代码:

  _signup = () => {
    fetch('http://localhost/users/', {
      method: 'post',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(this.state)
    }).then(response => {
      return response.json();
    }).then(jsonResponse => {
      console.log(jsonResponse);
    }).catch (error => {
      console.log(error)
    })

  }

给出以下响应

 Object {
 "detail": "CSRF Failed: CSRF token missing or incorrect.",
}

卷曲代码是:

curl -X POST -d '{"username":"a", "email":"", "password":"a"}' -H "Content-Type: application/json" http://localhost/users/

响应在哪里

{"url":"http://localhost/users/13/","username":"a7","email":""}

相关的 Django 视图只是一个视图集:

Django视图:

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer.

有什么理由应该发生这种情况吗?据我所知, fetch 和 curl 应该做同样的事情吗?

标签: djangoreact-nativecurlfetch

解决方案


事实证明,应用程序中存储了 cookie,删除它们解决了问题。


推荐阅读