我是一家使用django后端的公司的测试人员。我想编写一个测试,通过将表单数据发布到django管理屏幕之一来修改用户。我们的后端测试环境在防火墙上通过基本身份验证进行保护,然后在与django通信时使用csrf令牌。我可以使用基本身份验证来访问django服务器,然后我可以使用csrf实际登录该站点,并让服务器向我发送测试用户的accou nt页面。但是当我的数据更改发回到同一个端点时,csrf验证失败(CSRF令牌丢失或不正确)。我无法弄清楚为什么csrf验证在某些情况下有效,但在其他情况下却无效。谁能告诉我我做错了什么?我已经从我的代码中创建了一个mvp,试图阐明这个问题。希望那里有人知道我做错了什么。
session = requests.Session()
auth = requests.auth.HTTPBasicAuth('redacted', 'redacted')
session.auth = auth
url = "http://local.redacted.dev/ouadm/login/"
response = session.get(url, params={'next': '/ouadm/'}, allow_redirects=True)
session.headers['Referer'] = 'https://redacted.com/ouadm/login/'
csrfmiddlewaretoken = response.cookies['csrftoken']
data = {'csrfmiddlewaretoken': csrfmiddlewaretoken, 'username': 'testuser', 'password': 'password'}
response = session.post(url, data=data, params={'next': '/ouadm/'}, allow_redirects=True)
data = {'csrfmiddlewaretoken': csrfmiddlewaretoken, 'csrftoken': csrfmiddlewaretoken, 'username': 'testuser',
'first_name': 'joe', 'last_name': 'user',
'email': 'testuser@redacted.com', 'is_active': 'on', 'is_staff': 'on', 'is_superuser': 'on',
'groups': '6',
'groups': '13', 'groups': '18', 'groups': '21', 'groups': '16', 'groups': '11',
'user_permissions': '334',
'user_permissions': '16', 'last_login_0': '2016-05-25', 'last_login_1': '14,32,04',
'date_joined_0': '2015-10-26',
'date_joined_1': '15,44,35', 'initial-date_joined_0': '2015-10-26', 'initial-date_joined_1': '15,44,35',
'_save': 'Save'}
#desperate much?
session.headers['HTTP_X_CSRFToken'] = csrfmiddlewaretoken
session.headers['HTTP_X_OU_AUTH_TOKEN'] = csrfmiddlewaretoken
session.headers['X-CSRFToken'] = csrfmiddlewaretoken
response = session.get('http://local.redacted.dev/ouadm/auth/user/11/', data=data, allow_redirects=True)
session.headers.update({'Referer':'http://local.redacted.dev/ouadm/auth/user/11/'})
response = session.post('http://local.redacted.dev/ouadm/auth/user/11/', data=data, allow_redirects=True)