部署在Azure Web App+PostgreSQL的Django应用登录页出现CSRF错误求助
关键检查项
ALLOWED_HOSTS 配置
确认 settings.py 里的ALLOWED_HOSTS包含你的Azure应用域名(比如<yourappname>.azurewebsites.net),PostgreSQL实例环境里可能漏配了这个,导致CSRF cookie没法正确生成。添加CSRF_TRUSTED_ORIGINS
在settings.py里加上CSRF_TRUSTED_ORIGINS = ['https://<yourappname>.azurewebsites.net'],注意必须是https协议。Azure生产环境用的是HTTPS,Django得信任这个源才能正常验证CSRF token。Cookie安全配置
检查SESSION_COOKIE_SECURE和CSRF_COOKIE_SECURE是否设为True。Azure强制用HTTPS,这两个参数不开的话,cookie传输不安全,可能导致token传递失败。验证CSRF token渲染
打开登录页面的源代码,看看有没有生成<input type="hidden" name="csrfmiddlewaretoken" value="..." />这个元素。如果没有,可能是静态文件没收集好(记得执行python manage.py collectstatic再部署),或者模板加载出了问题。反向代理头配置
Azure App Service是通过反向代理转发请求的,得在settings.py里加SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https'),让Django知道真实请求用的是HTTPS,不然会因为协议不匹配触发CSRF错误。
内容的提问来源于stack exchange,提问作者RichardW

