部署在Railway的Django应用Admin面板CSRF验证失败求助
解决Django部署Railway后Admin面板CSRF验证失败问题
问题根源
你配置的CSRF_TRUSTED_ORIGINS和CORS_ALLOWED_ORIGINS末尾多了斜杠/,而Django对源的匹配是严格区分的——错误提示里的源是https://web-production-93c6.up.railway.app(不带斜杠),和你配置的带斜杠地址不匹配,直接导致了CSRF验证失败。
修复步骤
- 修改
settings.py中的信任源配置,删掉末尾的斜杠:
# 修正后的CSRF信任源 CSRF_TRUSTED_ORIGINS = [ 'https://web-production-93c6.up.railway.app' ] # 修正后的CORS允许源 CORS_ALLOWED_ORIGINS = [ 'https://web-production-93c6.up.railway.app' ]
- (可选优化)为避免Railway重新部署后域名变动再次出问题,建议用环境变量动态配置:
import os # 从环境变量读取,默认值保留原有域名 CSRF_TRUSTED_ORIGINS = [os.getenv('CSRF_TRUSTED_ORIGIN', 'https://web-production-93c6.up.railway.app')] CORS_ALLOWED_ORIGINS = [os.getenv('CORS_ALLOWED_ORIGIN', 'https://web-production-93c6.up.railway.app')]
之后去Railway应用的环境变量设置中,添加CSRF_TRUSTED_ORIGIN和CORS_ALLOWED_ORIGIN,值填入你的实际应用域名即可。
3. 重新部署应用:Railway推送代码后会自动重启服务,若未生效可手动触发一次部署。
额外检查项
别忘了确认ALLOWED_HOSTS包含你的应用域名,这也是部署时容易遗漏的配置:
ALLOWED_HOSTS = ['web-production-93c6.up.railway.app', 'localhost']
内容的提问来源于stack exchange,提问作者kabszac
相关产品推荐
相关产品推荐

