“CSRF verification failed” 全面排查:跨域、子域与反向代理

现象 登录/表单提交报 CSRF 失败,尤其是子域或前后端分离场景。

常见原因

Cookie 未随请求发送:跨域、SameSite 设置不当。

代理未透传 Cookie/X-CSRFToken。

模板里没注入 {% csrf_token %}。

CSRF_TRUSTED_ORIGINS 未包含实际来源。

修复模板

<form method="post">{% csrf_token %} ... </form>

设置示例

CSRF_TRUSTED_ORIGINS = ["https://admin.example.com", "https://app.example.com"] CSRF_COOKIE_SAMESITE = "Lax" # 前后端分离可能要 "None" 并开启 CSRF_COOKIE_SECURE=True CSRF_COOKIE_SECURE = True

代理:确保不剥离 Cookie,前端 fetch 携带 credentials: 'include'。

自查

站点协议一致(https)

Token 值是否随请求头/表单提交

子域/主域是否在信任列表

这类跨域小坑我在 gplpal 的项目复盘中也屡次遇到。

评论 0