javascript - Django 作为 API + ReactJS - Redux : POST request with CSRF token but still response CSRF Token not set

标签 javascript django post csrf fetch

环顾四周后,我想确定我做得对,但我开始怀疑,最糟糕的是:我没有选择/想法了。

所以我使用 django 作为 API(我只收到对某些 Assets 的请求),除了基类 View 中的一个 POST 方法以允许我的用户下载文件。

问题是 django 期望我的 POST 上有一个 CSRF token 。

所以,这是我在 Reactjs 中所做的事情:

export function sendData(endpoint, req, data) {
return dispatch => {
    dispatch(requestData(data));
    let csrfToken = Cookies.get('csrftoken');

    return fetch(endpoint, {
        method: req,
        headers: {
            'Content-Type': 'application/json',
            'X-CSRFToken': csrfToken,
        },
        body: JSON.stringify(data),
    })
    .then(checkStatus)
    .then(reponse => {
        console.log("Success!");
    }).catch(err => {
        err.response.json().then((json) =>{
            let { Errors, Result } = json;
            console.log('request failed: ', Errors, " ", Result);
        });
    });
};

};

如您所见,我正在使用“whatwg-fetch”库。 我尝试用 X-CSRF-Token 替换 X-CSRFToken 但请求被阻止到 chrome“选项”并且似乎未正确发送: 预检响应中的 Access-Control-Allow-Headers 不允许请求 header 字段 x-csrf-token。

但我仍然遇到我一直在各处阅读的错误:

CSRF verification failed. Request aborted. Reason given for failure: CSRF cookie not set.

呃。

我在这里缺少什么?

在我看来,我已经尝试过各种装饰器,甚至包括这个:

class DownloadAssetsView(ViewUrlMixin, ListView):
    @csrf_exempt
    def post(self, request, *args, **kwargs):
        print(request)
        return HttpResponse("coucou", status=200, content_type='application/json')

但我无法让它发挥作用..

PS:django 根本没有模板渲染到我的客户端。

最佳答案

我们的项目中遇到了这个问题。csrf token 用于阻止未知 token 和请求。如果您查看有关 csrf token 的文档,您可以找到这一点。csrf token 阻止您对 django 服务器的外部请求。我们合并 react 项目到我们的 django.it 修复。尝试一下。我不是这方面的专家,但你可以检查一下。

关于javascript - Django 作为 API + ReactJS - Redux : POST request with CSRF token but still response CSRF Token not set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878653/

相关文章:

python - django 中的自定义用户仪表板

php - $this->post codeigniter 不适用于rest api

jQuery Ajax 不发布任何数据

javascript - AngularJS:如何知道 $compile 何时完成?

javascript - 在动态创建的大型表中加速 for 循环文本替换

javascript - 指向捆绑在一起的 JS 模块的常见依赖关系的最佳方法是什么?

javascript - 在 AngularJS 中显示更多功能?

python - Django 在 PDF 导出中更改文件名

c# - 使用 HttpClient 通过 HTTP POST windows phone 8.1 上传图像和字符串

JSON 与表单 POST