同一域上的多个 Django 站点 - CSRF 失败

Dik*_*nov 3 django cookies csrf django-csrf csrf-protection

我有两个应用程序在同一域的不同端口上运行,都使用 csrf 中间件。

当我登录其中一个应用程序时,POST另一个应用程序的所有提交都会失败。
我认为是因为它们SESSION_COOKIE_DOMAIN是相同的。

我尝试更改SESSION_COOKIE_NAME,但是,两个站点上的'csrftoken'表单POST请求中都使用了 cookie,无论现在有一个具有我指定名称的新 cookie。

当我使用 AJAX 发布信息并从具有新名称的 cookie 获取 csrf 令牌时,它可以工作,但是,表单提交失败,CSRF 验证失败。

Jos*_*eph 6

默认情况下,CSRF 令牌 cookie 名为 csrftoken,但您可以通过 CSRF_COOKIE_NAME 设置控制 cookie 名称。文档

为每个应用程序使用不同的 CSRF cookie 名称。

  • 您说您只更改了SESSION_COOKIE_NAME,但是您是否也像我提到的那样更改了CSRF_COOKIE_NAME?您的表单是否包含 {% csrf_token %} 标记? (3认同)