我正在使用 React 前端和 Django 后端,并且已经在身份验证方面苦苦挣扎了好几天。我已经将我遇到的问题归结为浏览器未设置从后端接收的 cookie。
在检查时,我可以验证响应中是否存在 Set-Cookie 标头。但它们没有出现在存储中...(cookie 是 csrf 令牌和会话 id)。依赖于这些 cookie 的其他功能(例如注销)会失败。但是,当使用 Django Rest 框架接口(连接到后端 url,例如 localhost:8000/users/login/)时,我可以执行登录,然后 cookie 就会出现在存储中。
我已经尝试了 fetch 和 axios,我分别包含了凭据:'include' 和 withCredentials: true。
最后一点,当使用 fetch 时,我会获取响应
fetch(url, { ... })
.then(res => console.log(res.headers.get('Set-Cookie')))
当打印 null 时,当循环所有存在的标头时,我只看到两个(如应用程序 json)。
一些截图供参考。
这些是所有存在的 cookie,我期待看到 csrftoken 和 session。
下图显示了标头,有两个 Set-Cookie 标头,其中包含 sessionid 和 csrftoken。
最后是响应中的cookies
我已经在 Django 中启用了 cors 设置,我尝试了 cookie 的所有 SAMESITE 和 HTTPONLY 设置,我也尝试了不同的 cors 设置,但没有任何效果。
要让浏览器接受 samesite=none 的 cookie,那么它们还必须设置 secure 属性,并且您必须使用 HTTPS。
喜欢
Set-Cookie:SessionCookie=xxxxxxxxxx; SameSite=None; Secure;