“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