【发布时间】:2020-12-08 06:50:53
【问题描述】:
我正在尝试在不同的域中使用我的 django 站点的 iframe,但是每当我提交表单时,它都会显示 CSRF cookie 未设置。这发生在 chrome 和 safari 中。我正在运行 Django 3.1.0。
我尝试在 settings.py 中添加以下设置:
SESSION_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SECURE = True
X_FRAME_OPTIONS = 'ALLOWALL'
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CSRF_COOKIE_SECURE = False
CSRF_COOKIE_SAMESITE = None
CSRF_COOKIE_HTTPONLY = False
CSRF_TRUSTED_ORIGINS = [
'otherdomain.com',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
此外,我可以使用以下格式确认 csrf 令牌:
{% csrf_token %}
最后,我还在表单页面中添加了 @xframe_options_exempt 装饰器。
编辑:我也在使用文档推荐的渲染方法来显示表单。
Edit2:对于更多上下文,此表单在主机域(不是 iframe)中使用时可以正常工作
不幸的是,csrf 豁免装饰器对我来说不是一个选项。我已经尝试清除我的 cookie,但它并没有解决我的问题。任何帮助将不胜感激!
【问题讨论】:
标签: django iframe django-forms csrf django-csrf