登录SPA后CSRF令牌不正确,但刷新页面后正确

IT技术 django reactjs csrf single-page-application django-rest-auth
2021-05-17 12:03:43

我们在后端使用 django-rest-framework 制作 react SPA,并使用 django-rest-auth 进行用户身份验证。

当用户登录后,我们向他显示更改配置文件数据的表单。当用户提交此表单时,我们从登录响应中的 cookie 中获取 csrf 令牌,并将它们放入请求 X-CSRFToken 标头中。服务器响应令牌丢失或不正确。

如果用户刷新页面并重复相同的操作,则 csrf 令牌正确且配置文件数据已更新。

如何解决这个问题以及它为什么会发生?

1个回答

看起来正在发生这种情况:

  • 登录成功
  • cookie+token由CSRF API创建并返回给端点
  • 就绪状态执行一些 API 响应后未执行的代码
  • 在 GET 请求和/或就绪状态回调期间验证证书并在数据库/应用程序配置/服务器端缓存中设置 cookie+token

由于在刷新之前没有 GET 请求,因此 cookie+token 在此之前不会集中存储。添加一个请求来模拟 GET 期间发生的情况,然后将其存储在当前正在访问的位置以供后续请求使用。

参考