我在Django支持的网站上遇到了csrf令牌的问题,我很接近将其报告为错误。
问题基本上是,当DEBUG
为False
时,CSRF令牌失败。当DEBUG
为False
时,如果我正在使用csrf令牌的会话(Django 1.11):
CSRF_USE_SESSIONS = True
CSRF_COOKIE_AGE = None
...前端的所有表单/发布请求都失败了身份验证,但我可以正常登录Django管理面板,例如,csrf令牌身份验证成功。
另一方面,如果我正在为csrf使用cookie,那么对表单/帖子请求的前端进行身份验证时没有任何问题,但是对于管理员登录失败了:CSRF verification failed. Request aborted.
我的settings.py
文件的一部分如下所示:
SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
DEBUG = 'DEBUG' in os.environ
# CSRF
# These are commented/uncommented depending on what method I'm testing
# CSRF_USE_SESSIONS = True
# CSRF_COOKIE_AGE = None
# I added the cookie domain setting after I started seeing the problem
# and hoped it would have resolved it; it didn't help.
CSRF_COOKIE_DOMAIN = '.{0}'.format(os.getenv('DOMAIN_NAME', 'mysite.com'))
ALLOWED_HOSTS = [
'.mysite.com',
'.mysite.info',
]
if DEBUG:
ALLOWED_HOSTS.extend(['.mysite.dev'])
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mainsite',
'constance',
'jstemplate',
'compressor',
]
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.middleware.gzip.GZipMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'mainsite.middleware.Guid',
'mainsite.middleware.SiteLang',
]
如果我将DEBUG
设置为True
,我在前端和登录Django管理面板时都没有任何CSRF令牌身份验证问题。
我也使用Redis作为缓存。我错过了导致此CSRF错误的重要事项吗?我必须指出,有一点我没有得到这个错误,但我不能在我的生活中找出使用CSRF令牌产生这种行为的改变。
答案 0 :(得分:0)
我也有同样的问题
我解决了这个问题
1. pip install django-sslserver
。
2.将sslserver
放入INSTALLED_APPS
3. python manage.py runsslserver