You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django开发Shopify嵌入应用在Safari iframe异常及中间件配置问题

Django Shopify嵌入应用Safari iframe异常及中间件配置问题解决

先解决WSGI应用加载失败错误

出现django.core.exceptions.ImproperlyConfigured: WSGI应用'shopify_django_app.wsgi.application'无法加载;导入模块错误,优先排查以下几点:

  • 确认项目根目录下wsgi.py的路径正确,模块名shopify_django_app与你的实际项目名称完全匹配
  • 检查wsgi.py文件内是否存在语法错误,比如缺失导入语句、缩进错误等
  • 重新安装项目依赖,执行pip install -r requirements.txt确保所有依赖包正常安装
  • 验证Python路径配置,确保shopify_django_app所在目录已加入Python的sys.path中

调整IFrameFixMiddleware的正确顺序

针对Safari iframe运行异常的问题,IFrameFixMiddleware需要放在SecurityMiddleware之后——它需要改写SecurityMiddleware设置的X-Frame-Options响应头,而Safari对iframe的跨域限制比其他浏览器更严格。同时要配合CSP中间件完成域名权限配置。

修改后的MIDDLEWARE配置如下:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    # 必须紧跟SecurityMiddleware,确保能正确修改X-Frame-Options头
    'iframetoolbox.middleware.IFrameFixMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'csp.middleware.CSPMiddleware',
    'shopify_app.middleware.LoginProtection',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
]

额外的Safari iframe兼容配置

  1. 配置CSP的frame-ancestors,允许Shopify相关域名嵌入你的应用:
    在settings.py中添加或修改CSP设置:
CSP_FRAME_ANCESTORS = [
    "https://*.myshopify.com",
    "https://*.shopifyapps.com",
    # 本地开发环境可添加localhost
    "http://localhost:*",
]
  1. 调整Session Cookie属性,适配Safari跨域iframe限制:
# 生产环境需开启Secure,确保Cookie仅通过HTTPS传输
SESSION_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SECURE = True

Safari对跨域iframe的Cookie校验严格,SameSite=None+Secure组合才能让Session Cookie在iframe环境中正常传递。

内容的提问来源于stack exchange,提问作者Sandeep KS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:40:18