【发布时间】:2020-01-15 01:04:59
【问题描述】:
首先,我知道有很多关于 CSRF 令牌/Django 的问题,但我没有找到任何对我所处的场景有用的问题。
我正在尝试将 Django 的内置密码重置端点与 React 前端一起使用。我的目标是使用后端功能(生成令牌、电子邮件响应等),同时通过 React 而不是使用 Django 模板显示相关表单。前端和后端托管在两台不同的服务器上。
在我的前端代码中,当我的 React 组件挂载以获取 CSRF 令牌时,我调用了 password_reset 端点。
componentDidMount() {
let url = "http://(raw ip address)/accounts/password_reset/"
fetch(url, {
credentials: 'include',
})
}
令牌在响应标头中接收为
Set-Cookie: csrftoken=b...e; expires=Sun, 10 Jan 2021 21:50:20 GMT; Max-Age=31449600; Path=/; SameSite=Lax
这是我的问题开始的地方 - 我无法检查我的存储选项卡中的令牌,并且令牌值不存在于 document.cookie 中。理想情况下,我想使用类似于 Django 文档中演示的 getCookie 方法
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
但这假设令牌值正确存储在document.cookie中。
我的相关 Django 设置都是默认值,尽管我已经轮换了 CSRF_COOKIE_SAMESITE 和 CSRF_USE_SESSIONS 的有效选项,但无济于事。
另外注意,如果我在安装组件后发出POST 请求,则令牌已成功设置在请求上 - 但我需要在正文中添加默认 Django 身份验证视图的令牌!
任何建议或见解将不胜感激!
伊恩
【问题讨论】:
标签: csrf django-csrf csrf-token