问题描述
背景
我一直在尝试从 React 前端向应用程序的后端(用 Django 编写)发出 POST 请求,但请求失败,因为该请求不包含 CSRF 令牌。这是我用来设置和发送请求的代码:
const formData = new FormData()
// 'image' is a user uploaded image
formData.append(
"myImage",image,image.name
)
const data = await axios.post("http://localhost:8000/myendpoint",formData)
return data
我的应用程序非常简单,因为没有我需要做的登录/会话保持,并且要使用该应用程序,用户只需要向我的 Django API 提供一些数据(准确地上传图像)端点,然后得到一些结果。作为参考,这是我在 Django 服务器日志中看到的内容:
禁止(未设置 CSRF cookie。):/myendpoint
这是我在浏览器控制台中看到的错误:
POST http://localhost:8000/myendpoint 403(禁止)
基于一些与我的问题类似的问题,建议似乎是从 Django 发送的 csrftoken
cookie 中检索此 CSRF 令牌,然后将其包含在后续的 POST 请求中(例如,{{3} } 回答)。我不认为这会起作用,因为我在 localhost:3000
时没有在浏览器的开发窗口中看到任何 cookie,但我无论如何都尝试并看到 cookie 未定义:
CSRF 代币:未定义
我使用此代码尝试获取 cookie(使用 this 库):
var csrftoken = Cookies.get('csrftoken');
console.log(`CSRF Token: ${csrftoken}`)
问题
如果这是我发送的唯一请求,有没有办法在发送 POST 请求之前从 Django 获取 CSRF 令牌 cookie?我知道一些“hacky”方法,例如为我的端点使用 csrf_exempt
装饰器,但我想知道是否有办法让它在没有它的情况下工作?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)