部署在Railway的Django应用出现CSRF Token问题:验证失败请求中止
解决Django CSRF验证失败问题
针对你遇到的CSRF verification failed. Request aborted.错误,结合本地正常、部署后异常的情况,可尝试以下排查和修复步骤:
修正
CSRF_TRUSTED_ORIGINS配置:确保配置包含完整的协议(http/https)和域名,格式类似:CSRF_TRUSTED_ORIGINS = ["https://your-production-domain.com"]如果站点使用非标准端口,也要一并加上,比如
["https://your-domain.com:8443"]。检查表单/请求的CSRF令牌携带:
- 表单提交场景:确保模板里添加了
{% csrf_token %}标签,放在<form>标签内部。 - AJAX请求场景:在请求头中加入
X-CSRFToken字段,值从浏览器的csrftokenCookie中获取。
- 表单提交场景:确保模板里添加了
验证
ALLOWED_HOSTS配置:确认部署环境的域名已加入该列表,例如:ALLOWED_HOSTS = ["your-production-domain.com", "www.your-production-domain.com"]配置HTTPS环境下的Cookie参数:如果部署在HTTPS环境中,需设置:
CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_DOMAIN = "your-production-domain.com" # 若有子域名需求可设为".your-domain.com"检查服务器反向代理配置:如果使用Nginx等反向代理,需确保转发了正确的请求头,添加以下配置:
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host;同时在Django的
settings.py中设置:USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
完成上述配置后,重启Django服务和反向代理服务,再测试请求是否正常。
内容的提问来源于stack exchange,提问作者Huzaifa
相关产品推荐
相关产品推荐

