当 index.html 由 nginx 提供服务时从 Django 获取 CSRF 令牌

Acquiring CSRF token from Django when index.html is served by nginix

我有一个带有 Django 后端的 React SPA。与大多数 SPA 一样,需要提供一个 index.html 文件。但问题是该文件由 nginx 提供,因此用户无法获得进行 api 调用所需的 csrf 令牌。我真的不想提供 index.html,因为它需要将文件与 npm run build 输出的其余部分分开并破坏 "just put it in /static/ directory" 工作流程,并且还出于缓存原因。还有其他解决方法吗?

CSRF 令牌总是随着每次页面加载而更新。它必须由 django 提供服务,因为 django 是提供和验证它的应用程序。将 index.html 文件放在你的 django 模板文件夹中,将它与你的索引视图一起提供,将 CSRF 令牌转换为 javascript 代码并在你的 ReactJS 代码中使用它

index.html

...
<body>
<script>
     var csrftoken = '{{ csrf_token }}';
</script>
...
</body>
...